vim常用连招
-
ggdG
—剪切(删除)全文(gg
—回到开头,d
—开启剪切模式,G
—回到最后一行。连招就是:剪切全文) -
ggd5
—剪切(删除)1到5行(gg
—回到开头,d
—开启剪切模式,5
—回到第5行。连招就是:剪切1到5行) -
gg=G
—全文格式化(gg
—回到开头,=
—开启格式化模式,G
—回到最后一行。连招就是:全文格式化) -
ggvG$y
—选中全文并复制(gg
—回到开头,v
—选中文本,G
—回到最后一行,$
—回到最后即行末,y
—复制) -
3G4<Space>
—到达第3行第4个字符后面 -
11Gdd
—剪切(删除)第11行 -
5Gyy
—复制第5行 -
11G14<Space>v13G5<Space>d
—删除第11行第15个字符(包含该字符)至第13行第5个字符(包含该字符) -
G$p
—将所复制的内容粘贴到当前文件末尾(不另起一行) -
15Gv21G>
—选中第15-21行并向右缩进1次
$\\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ $
完整教程:
一. tmux教程
功能:
-
分屏。
-
允许断开Terminal(终端)连接后,继续运行进程。
结构:
一个tmux可以包含多个session,一个session可以包含多个window,一个window可以包含多个pane。
实例:
tmux:
session 0:
window 0:
pane 0
pane 1
pane 2
...
window 1
window 2
...
session 1
session 2
...
操作:
-
tmux
—新建一个session,其中包含一个window,window中包含一个pane,pane里打开了一个shell对话框。 -
按下
Ctrl + a
后手指松开,然后按%
—将当前pane左右平分成两个pane。 -
按下
Ctrl + a
后手指松开,然后按"
(注意是双引号”)—将当前pane上下平分成两个pane。 -
Ctrl + d
—关闭当前pane;如果当前window的所有pane均已关闭,则自动关闭window;如果当前session的所有window均已关闭,则自动关闭session。 -
鼠标点击可以选pane。
-
按下
ctrl + a
后手指松开,然后按方向键
—选择相邻的pane。 -
鼠标拖动
pane之间的分割线
—可以调整分割线的位置。 -
按住
ctrl + a
的同时
按方向键
—可以调整pane之间分割线的位置。 -
按下
ctrl + a
后手指松开,然后按z
—将当前pane全屏/取消全屏。 -
按下
ctrl + a
后手指松开,然后按d
—挂起当前session。 -
tmux a
—打开之前挂起的session。 -
按下
ctrl + a
后手指松开,然后按s
—选择其它session。方向键 —— 上:选择上一项 session/window/pane
方向键 —— 下:选择下一项 session/window/pane
方向键 —— 右:展开当前项 session/window
方向键 —— 左:闭合当前项 session/window -
按下
Ctrl + a
后手指松开,然后按c
—在当前session中创建一个新的window。 -
按下
Ctrl + a
后手指松开,然后按w
—选择其他window,操作方法与(12)完全相同。 -
按下
Ctrl + a
后手指松开,然后按PageUp
—翻阅当前pane内的内容。 -
鼠标滚轮
—翻阅当前pane内的内容。 -
在tmux中选中文本时,需要按住
shift键
。(仅支持Windows和Linux,不支持Mac,不过该操作并不是必须的,因此影响不大) -
tmux中复制/粘贴文本的通用方式:
(1) 按下
Ctrl + a
后松开手指,然后按[
(2) 用鼠标选中
文本,被选中的文本会被自动复制到tmux的剪贴板
(3) 按下Ctrl + a
后松开手指,然后按]
,会将剪贴板中的内容粘贴到光标处
小技巧:如何将服务器中的文件整体复制出来?
-
退出
tmux
-
cat filename
:展示filename
的文件内容 -
鼠标
选中文本开头
的若干字符 -
用滚轮
滑到文件结尾
-
按住
Shift
,同时鼠标点击文件结尾
,此时会选中文件所有内容 -
Windows/Linux下,按
Ctrl + insert
可以复制全文;Mac下,按Command + c
可以复制全文。
$\\ \\ \\ $
二. vim教程
功能:
-
命令行模式下的文本编辑器。
-
根据文件扩展名自动判别编程语言。支持代码缩进、代码高亮等功能。
-
使用方式:vim filename:
-
如果已有该文件,则打开它。
-
如果没有该文件,则打开个一个新的文件,并命名为filename
-
模式:
-
一般命令模式
-
默认模式。
-
命令输入方式:类似于打游戏放技能,按不同字符,即可进行不同操作。可以复制、粘贴、删除文本等。
-
-
编辑模式
-
在一般命令模式里按下
i
,会进入编辑模式。 -
按下
ESC
会退出编辑模式,返回到一般命令模式。
-
-
命令行模式
-
在一般命令模式里按下
:/?
三个字母中的任意一个,会进入命令行模式。命令行在最下面。 -
可以查找、替换、保存、退出、配置编辑器等。
-
操作:
-
i
—进入编辑模式 -
ESC
—·进入一般命令模式 -
h
或左箭头键
—光标向左移动一个字符 -
j
或向下箭头
—光标向下移动一个字符 -
k
或向上箭头
—光标向上移动一个字符 -
l
或向右箭头
—光标向右移动一个字符 -
n<Space>
—n
表示数字,按下数字后再按空格,光标会向右移动这一行的n
个字符 -
0
或功能键[Home]
—光标移动到本行开头 -
$
或功能键[End]
—光标移动到本行末尾 -
G
—光标移动到最后一行 -
:n<Enter>
或nG
—n
为数字,光标移动到第n
行 -
gg
—光标移动到第一行,相当于1G
-
n<Enter>
—n
为数字,光标向下移动n
行 -
/word
—向光标之下寻找第一个值为word
的字符串。 -
?word
—向光标之上寻找第一个值为word
的字符串。 -
n
—重复前一个查找操作 -
N
—反向重复前一个查找操作 -
:n1,n2s/word1/word2/g
—n1
与n2
为数字,在第n1
行与n2
行之间寻找word1
这个字符串,并将该字符串替换为word2
-
:1,$s/word1/word2/g
—将全文的word1
替换为word2
-
:1,$s/word1/word2/gc
—将全文的word1
替换为word2
,且在替换前要求用户确认。 -
v
—选中文本 -
d
—删除选中的文本 -
dd
—删除当前行 -
y
—复制选中的文本 -
yy
—复制当前行 -
p
—将复制的数据在光标的下一行/下一个位置粘贴 -
u
—撤销 -
Ctrl + r
—取消撤销 -
大于号 >
—将选中的文本整体向右缩进一次 -
小于号 <
—将选中的文本整体向左缩进一次 -
:w
—保存 -
:w!
—强制保存 -
:q
—退出 -
:q!
—强制退出 -
:wq
—保存并退出 -
:set paste
—设置成粘贴模式,取消代码自动缩进 -
:set nopaste
—取消粘贴模式,开启代码自动缩进 -
:set nu
—显示行号 -
:set nonu
—隐藏行号 -
gg=G
—将全文代码格式化 -
:noh
—关闭查找关键词高亮 -
Ctrl + q
—当vim卡死时,可以取消当前正在执行的命令
异常处理:
-
每次用vim编辑文件时,会自动创建一个
.filename.swp
的临时文件。 -
如果打开某个文件时,该文件的
swp
文件已存在,则会报错。此时解决办法有两种:(1) 找到正在打开该文件的程序,并退出
(2) 直接删掉该
swp
文件即可
$\\ \\ \\ $
homework:
-
Task(0): 进入homework_0文件夹,创建文件names.txt,并顺次将下列姓名写入该文件,每个名字占一行。AcWing、yxc、Bob、张强、李明、Alice
cd homework_0
vim names.txt
i //进入编辑模式
按要求依次输入内容
Esc //退出编辑模式,进入一般命令模式
:wq //保存并退出
-
Task(1): 进入homework_1文件夹,打开problem.txt,并依次删除下列字符:
[1] 最后一行第101个字符
[2] 第3行第8个字符
[3] 第1行第30个字符
[4] 第16行第55个字符
[5] 第9行第80个字符
最后保存文件并退出。
cd homework_1
vim problem.txt
G101<Space>i<Backspace><Ese> //删除最后一行第101个字符
:3<Enter>8<Space>i<Backspace><Ese> //删除第3行第8个字符
gg30<Space>i<Backspace><Ese> //删除第1行第30个字符
16G55<Space>i<Backspace><Ese> //删除第16行第55个字符
9G80<Space>i<Backspace><Ese> //删除第9行第80个字符
:wq //保存文件并退出
-
Task(2): 进入homework_2文件夹,打开problem.txt,并依次执行如下操作:
[1] 在第1个”two”的后面添加”abc”
[2] 在第2个”two”的前面添加”def”
[3] 将第3个”two”后面的连续12个字符删掉
[4] 将第4个”two”所在的行删掉
最后保存文件并退出。
cd homework_2
vim problem.txt
/two<Enter><向右移3步> //向光标之下寻找第一个"two"
iabc<Esc> //在第1个"two"的后面添加"abc"
nidef<Esc> //在第2个"two"的前面添加"def"
nn<向右移3步><Delete*12><Esc> //将第3个"two"后面的连续12个字符删掉
ndd //将第4个"two"所在的行删掉
:wq<Enter> //保存并退出
-
Task(3): 进入homework_3文件夹,打开problem.txt,并依次执行如下操作:
[1] 将第5行至第15行中所有of替换成OF。
[2] 将全文中所有的the替换成THE。
[3] 将第偶数个is替换成IS,第奇数个is不变。下标从1开始。
cd homework_3
vim problem.txt
:5,15s/of/OF/g<Enter> //将第5行至第15行中所有of替换成OF
:1,$s/the/THE/g<Enter> //将全文中所有的the替换成THE
:1,$s/is/IS/gc<Enter><n和y交互按> //将第偶数个is替换成IS,第奇数个is不变。下标从1开始
:wq<Enter> //保存文件并退出
-
Task(4): 进入homework_4文件夹,打开problem.txt,并依次执行如下操作:
[1] 删除第11行
[2] 将所删除的行粘贴到文件最后一行的下一行
[3] 复制第5行
[4] 将所复制的行粘贴到文件当前最后一行的下一行
cd homework_4
vim problem.txt
11Gdd //剪切(删除)第11行
Gp //将所删除的行粘贴到文件最后一行的下一行
5Gyy //复制第5行
Gp //将所复制的行粘贴到文件当前最后一行的下一行
:wq<Enter> //保存文件并退出
-
Task(5): 进入homework_5文件夹,打开problem.txt,并依次执行如下操作:
[1] 删除第11行第15个字符(包含该字符)至第13行第5个字符(包含该字符)
[2] 将所删除的内容粘贴到文件末尾(注意不要另起一行)
[3] 复制第5行第88个字符(包含该字符)至第7行第6个字符(包含该字符)
[4] 将所复制的内容粘贴到当前文件末尾(注意不要另起一行)
cd homework_5
vim problem.txt
11G14<Space>v13G5<Space>d //删除第11行第15个字符(包含该字符)至第13行第5个字符(包含该字符)
G$p //将所删除的内容粘贴到文件末尾(注意不要另起一行)
5G87<Space>v7G6<Space>y //复制第5行第88个字符(包含该字符)至第7行第6个字符(包含该字符)
G$p //将所复制的内容粘贴到当前文件末尾(注意不要另起一行)
:wq<Enter> //保存文件并退出
-
Task(6): 进入homework_6文件夹,并依次执行如下操作:
[1] 清空source0.cpp
[2] 将source1.cpp中的第1-3行和第12-24行复制到source0.cpp中
法1)系统复制粘贴
cd homework_6
vim source0.cpp
ggdG //清空source0.cpp
<Ctrl + a>," //再在当前window中开启一个新pane
----------------------------------------------------------------------
vim source1.cpp
:set nonu //隐藏行号
<Shift> + 选中第1-3行 //选中文本
<Ctrl><Insert> //复制
----------------------------------------------------------------------
选中source0.cpp所在的pane
:set paste //设置成粘贴模式,取消代码自动缩进
<Shift><Insert> //粘贴
----------------------------------------------------------------------
选中source1.cpp所在的pane
<Shift> + 选中第12-24行 //选中文本
<Ctrl><Insert> //复制
:set nu //显示行号
:q //退出
----------------------------------------------------------------------
选中source0.cpp所在的pane
<Shift><Insert> //粘贴
:set nopaste //取消粘贴模式,开启代码自动缩进
:wq //保存并退出
法2)vim复制粘贴
cd homework_6
----------------------------------------------------------------------
vim source0.cpp
ggdG //清空source0.cpp
:wq<Enter> //保存文件内容并退出
----------------------------------------------------------------------
vim source1.cpp
ggv4Gy //选中第1行到第4行开头并复制
:q<Enter> //退出
----------------------------------------------------------------------
vim source0.cpp
p //粘贴
:wq<Enter> //保存并退出
----------------------------------------------------------------------
vim source1.cpp
12GvG$y //选中第12行到文末(第24行行尾)并复制
:q<Enter> //退出
----------------------------------------------------------------------
vim source0.cpp
G //到达最后一行(第4行,因为上面一步粘贴的第4行为空行)
p //粘贴
:wq<Enter> //保存文本内容并退出
-
Task(7): 进入homework_7文件夹,格式化source.cpp
cd homework_7
vim source.cpp
gg=G //全文格式化
:wq<Enter> //保存文件内容并退出
-
Task(8): 进入homework_8文件夹,打开source.cpp,并依次执行如下操作:
[1] 将第15-21行向右缩进2次。
[2] 将第22-23行向左缩进1次。
cd homework_8
vim source.cpp
15Gv21G> //选中第15-21行并向右缩进1次
15Gv21G> //选中第15-21行并向右缩进1次
22Gv23G< //选中第22-23行并向左缩进1次
:wq<Enter> //保存文件内容并退出
-
Task(9):进入homework_9文件夹,打开链接: https://www.acwing.com/activity/content/code/content/1694465/ ,新建文件source.cpp,将链接中的代码抄进source.cpp文件中。
cd homework_9
<Shift> + 选中链接 //选中文本内容
<Ctrl> + <Insert> //复制链接
vim source.cpp
抄写相应代码
:wq<Enter> //保存文件内容并退出