Vim常用指令整理
Vim指令整理
1. 基本指令
1.1 系统命令
:q
quit (close window):w
save (“write”):wq
save and quit:e {name of file}
open file for editing:ls
show open buffers- :help {topic} open help
:help :w
opens help for the:w
command:help w
opens help for thew
movement
1.2 移动命令
1.2.1 光标的基本移动
命令 | 解释 |
---|---|
h,j,k,l | 左,下,上,右 |
H | 把光标移到屏幕最顶端一行 |
M | 把光标移到屏幕中间一行 |
L | 把光标移到屏幕最底端一行 |
+或Enter | 把光标移至下一行第一个非空白字符 |
- | 把光标移至上一行第一个非空白字符 |
w | 光标停在下一个单词开头 |
W | 移动到下一个单词开头,但忽略一些标点 |
e | 光标停在下一个单词末尾 |
E | 移动到下一个单词末尾,如果词尾有标点,则移动到标点 |
b | 光标停在上一个单词开头 |
B | 移动到上一个单词开头,忽略一些标点 |
ge | 光标停在上一个单词末尾 |
( | 前移1句 |
) | 后移1句 |
{ | 前移1段 |
} | 后移1段 |
0 | 移动到行首 |
$ | 移动到行尾 |
gg | 到文件头部 |
G | 到文件尾部 |
v | visual模式 |
shift+v | 选择一行 |
ctrl+v | 选择一块,在win中可能会冲突,以ctrl+q代替,或者ctrl+alt+v |
1.2.2 翻屏
命令 | 解释 |
---|---|
ctrl+f | 下翻一屏 |
ctrl+b | 上翻一屏 |
ctrl+d | 下翻半屏 |
ctrl+u | 上翻半屏 |
ctrl+e | 向下滚动一行 |
ctrl+y | 向上滚动一行 |
zz | 将当前行移动到屏幕中央 |
zt | 将当前行移动到屏幕顶端 |
zb | 将当前行移动到屏幕底端 |
1.3 复制粘贴
1.3.1 基本命令
命令 | 解释 |
---|---|
yy或Y | 复制游标所在行整行。 |
2yy或y2y | 复制两行。请举一反三 |
y^ | 复制至行首,或y0。不含游标所在处字元。 |
y$ | 复制至行尾。含游标所在处字元。 |
yw | 复制一个word。 |
y2w | 复制两个字(单词)。 |
yG | 复制至档尾。 |
y1G | 复制至档首。 |
p | 小写p代表贴至游标后(下)。 |
20p | 粘贴20次 |
P | 大写P代表贴至游标前(上)。 |
yy+p | 复制当前行到下一行 |
yy+P | 复制当前行到上一行 |
1.3.2 复制到系统剪贴板
-
选择全文
gg shift+V shift + G
-
复制到系统剪贴板
"+y 复制到系统剪切板 "+p 把系统粘贴板里的内容粘贴到vim 解释:"+y是把选中内容复制到系统剪切板。
要将vim某个粘贴板里的内容粘贴进来,需要退出编辑模式,在正常模式按"Np,其中N为粘贴板号,如上所述,可以按"5p将5号粘贴板里的内容粘贴进来,也可以按"+p将系统全局粘贴板里的内容粘贴进来。
-
查看剪贴板
VIM具有多个剪切板,":reg"命令查看各剪切板。系统剪切板的编号就是"+
-
将Vim默认剪贴板设为系统剪贴板
set clipboard=unnamedplus
1.4 插入文本
命令 | 解释 |
---|---|
i | 在光标前插入 |
I | 在当前行第一个非空字符前插入 |
a | 在光标后插入 |
A | 在当前行最后插入 |
o | 在下面新建一行插入 |
O | 在上面新建一行插入 |
ci( | 删除并修改()中的内容 |
da( | 删除(),以及其中的内容 |
1.5 切换标签页
- vim打开多个文件
vim file1 file2 … filen - vim已经启动
:e file - 同时显示多个文件
:sp 水平切分窗口
:vsplit 垂直切分窗口
不同tab页面切换
- 文件间切换
ctrl+6: 两个文件间来回切换
:bn 下一个文件
:bp 上一个文件
:ls 列出当前目录下的文件,带有编号,可通过编号切换
:b1~n切换至第n个文件 - 在窗口间切换
ctrl+w+方向键
ctrl+w+h/j/k/l
ctrl+ww依次切换至下一个窗口
vim7后tab切换
:tabnew [++opt选项] [+cmd] 文件 建立对指定文件新的tab
:tabc 关闭当前的tab
:tabo 关闭所有其他的tab
:tabs 查看所有打开的tab
:tabp 前一个
:tabn 后一个
标准模式下:
gt , gT 可以直接在tab之间切换。
更多可以查看帮助 :help table , help -p
不过用gt,gT来一个个切换有点不方便, 如果用:tabnext {count}, 又按键太多. 加入以下代码后, 可以用 alt+n来切换,
比如alt+1切换到第一个tab,alt+2切换到第二个tab。
把以下代码加到vimrc, 或者存为.vim文件,再放到plugin目。
:nn 1gt
:nn 2gt
:nn 3gt
:nn 4gt
:nn 5gt
:nn 6gt
:nn 7gt
:nn 8gt
:nn 9gt
:nn :tablast
2. 进阶指令
2.1 查找与替换
2.1.1 查找
-
在 normal 模式下按下
/
即可进入查找模式,输入要查找的字符串并按下回车。 Vim 会跳转到第一个匹配。按下n
查找下一个,按下N
查找上一个。 -
Vim 查找支持正则表达式,例如
/vim$
匹配行尾的"vim"
。 需要查找特殊字符需要转义,例如/vim\$
匹配"vim$"
。 -
在查找模式中加入
\c
表示大小写不敏感查找,\C
表示大小写敏感查找。例如:/foo\c
将会查找所有的
"foo"
,"FOO"
,"Foo"
等字符串。 -
在 normal 模式下按下
*
即可查找光标所在单词(word), 要求每次出现的前后为空白字符或标点符号。例如当前为foo
, 可以匹配foo bar
中的foo
,但不可匹配foobar
中的foo
。 这在查找函数名、变量名时非常有用。 -
按下
g*
即可查找光标所在单词的字符序列,每次出现前后字符无要求。 即foo bar
和foobar
中的foo
均可被匹配到。
2.1.2 查找并替换
:s
(substitute)命令用来查找和替换字符串。语法如下:
:{作用范围}s/{目标}/{替换}/{替换标志}
例如 :%s/foo/bar/g
会在全局范围(%
)查找 foo
并替换为 bar
,所有出现都会被替换(g
)。
作用范围
分为当前行、全文、选区等等。
当前行:
:s/foo/bar/g
全文:
:%s/foo/bar/g
选区,在 Visual 模式下选择区域后输入 :
,Vim 即可自动补全为 :'<,'>
。
:'<,'>s/foo/bar/g
2-11 行:
:5,12s/foo/bar/g
当前行 .
与接下来两行 +2
:
:.,+2s/foo/bar/g
替换标志符
上文中命令结尾的 g
即是替换标志之一,表示全局 global
替换(即替换目标的所有出现)。 还有很多其他有用的替换标志:
空替换标志表示只替换从光标位置开始,目标的第一次出现:
:%s/foo/bar
i
表示大小写不敏感查找,I
表示大小写敏感:
:%s/foo/bar/i
# 等效于模式中的\c(不敏感)或\C(敏感)
:%s/foo\c/bar
c
表示需要确认,例如全局查找 "foo"
替换为 "bar"
并且需要确认:
:%s/foo/bar/gc
回车后 Vim 会将光标移动到每一次 "foo"
出现的位置,并提示
replace with bar (y/n/a/q/l/^E/^Y)?
按下 y
表示替换,n
表示不替换,a
表示替换所有,q
表示退出查找模式, l
表示替换当前位置并退出。^E
与 ^Y
是光标移动快捷键.
2.2 跳转
在Vim中,要跳转到指定的行数可以使用以下命令:
:<line-number>
其中 <line-number>
为行号。
例如,如果要跳转到第10行,则可以在命令模式下输入:
:10
然后按回车键即可跳转到第10行。如果要跳转到文件的最后一行,则可以使用以下命令:
:$
$
符号表示最后一行,因此 :$
命令会将光标移动到最后一行。
除了使用行号跳转,还可以使用相对行号跳转。例如,如果要向下移动5行,则可以在命令模式下输入:
:+5
如果要向上移动3行,则可以输入:
:-3
这样就可以快速地在Vim中跳转到指定的行数了。
2.3 快速生成和递增数字技巧
使用 put 和 range 快速生成数字
您可以通过以下方式快速生成升序数字
:put=range(1,5)
这会给你:
1
2
3
4
5
我们还可以控制增量。 如果我们想快速生成降序数,我们这样做:
:put=range(10,0,-1)
其他一些变化:
:put=range(0,10,2) // 从 0 到 10 递增 2
:put=range(5) // 从0开始,上升到5
这个技巧可能有助于在做笔记时生成列表。 在vim中,显示当前行,我们可以使用line('.')
。 这可以与 put/range 结合使用。假设您当前位于第40行。要生成第50行的数字,您需要执行以下操作:
:put=range(line(','),50)
于是你将得到的结果是:
40 // prints at line 41.
41
42
43
44
45
46
47
48
49
50
要调整上面的行号,将其更改为:put=range(line('.')+1,50)
以显示正确的行号。
快速增加数字列
假设我们有一列数字,比如下面 HTML 中的 0:
<div class="test">0</div>
<div class="test">0</div>
<div class="test">0</div>
<div class="test">0</div>
<div class="test">0</div>
<div class="test">0</div>
<div class="test">0</div>
<div class="test">0</div>
<div class="test">0</div>
如果我们想增加所有的零(1、2、3、...),我们可以很快做到。 方法如下:
首先,将光标移动到顶部 0(我使用 [] 表示光标位置)。
<div class="test">[0]</div>
<div class="test">0</div>
<div class="test">0</div>
<div class="test">0</div>
<div class="test">0</div>
<div class="test">0</div>
<div class="test">0</div>
<div class="test">0</div>
<div class="test">0</div>
使用 VISUAL BLOCK 模式 (<C-v>
),向下移动 8 次 (<C-v>8j
) 以直观地选择全部 0。
<div class="test">[0]</div>
<div class="test">[0]</div>
<div class="test">[0]</div>
<div class="test">[0]</div>
<div class="test">[0]</div>
<div class="test">[0]</div>
<div class="test">[0]</div>
<div class="test">[0]</div>
<div class="test">[0]</div>
现在键入g <C-a>
。
<div class="test">1</div>
<div class="test">2</div>
<div class="test">3</div>
<div class="test">4</div>
<div class="test">5</div>
<div class="test">6</div>
<div class="test">7</div>
<div class="test">8</div>
<div class="test">9</div>
Vim 8 和 neovim 具有使用<C-a>
自动递增数字(并使用<C-x>
递减)的功能。 你可以通过:help CTRL-A
来检查它。
我们还可以通过在前面插入一个数字来更改增量。 如果我们想要 10,20,30,... 而不是 1,2,3,...,请改为执行10g<C-a>
。
顺便说一句,使用<C-a>
和<C-x>
的超酷提示 - 您不仅可以递增数字,还可以递增八进制、十六进制、bin和alpha。
2.4 设置tab缩进为四个字符
:set tabstop=4