vim 的各种命令:
hjkl(强烈推荐其使用光标,但不必需)
:help <command> 显示命令相关的帮助
1 各种插入模式
a 在光标后插入
o 在当前行后插入一个新行
O 在当前行前插入一个新行
cw 替换从光标所在位置后到一个单词结尾的字符
2 简单的移动光标
0 数字零,到行头
^ 到本行第一个不是blank字符的位置(所谓 blank 字符就是空格,tab,换行,回车等)
$ 到本行行尾
g_ 到本行最后一个不是 blank 字符的位置
/pattern 搜索 pattern 的字符串(注:如果搜索多个匹配字符,可按 n 键到下一个)
3 拷贝/粘帖 (注: p/P都可以,p 是表示在当前位置之后,P 是表示在当前位置之前)
P 粘帖
yw 将光标所在之处到字尾的字符复制到缓冲区中
#yw 复制 # 个字到缓冲区
yy 复制光标行到缓冲区
#yy 例如 6yy 表示拷贝从光标所在的该行“往下数” 6 行文字
p 将缓冲区内的字符贴到光标所在的位置。(注:所有与 y 有光的复制命令都必须与 p 配合才能完成复制和粘帖的功能
4 Undo/Redo
u Undo
<C-r> Redo
5 打开/保存/退出/改变文件(Buffer)
:e <path/to/file> 打开一个文件
:w 存盘
:saveas <path/to/file> 另存为 /path/to/file
: x,ZZ 或 :wq 保存并退出 (:x 表示仅在需要时保存,ZZ不需要输入冒号并回车
:q! 退出不保存 :qa!强行退出所有正在编辑的文件,就算别的文件有更改
:bn 和 :bp 你可以同时打开很多文件,使用这两个命令来切换下一个或上一个文件。
PS 打开所文件的几种方法:
一、在同一窗口中打开多个文件:
vi file file1 file2 file3
:n 切换到下一个文件(n=next)
:N 切换到上一个文件
二、在不同的窗口中打开多个文件
如果已经打开了一个文件,则在 vi 的命令状态下输入 :sp 另外一个文件的路径及文件名 如此,就可以在一个窗口打开多个文件了。
或者使用 vi -o file1 file2 file3 ....用分隔屏幕窗口方式同时打开多个文件。
可以使用 ctrl + 两次按 w 或者 ctrl + w 然后按 上下键 在上下窗口间切换
三、窗口分隔实现编辑多文件
先使用 vi 打开一个文件,例如 vi file
分隔窗口打开另外的文件
命令行模式下输入 :sp 另外一个文件 就可以水平分割继续打开第二个文件,如果想纵向分割,可以使用 vsp 文件名 (注:vi 支持在一个窗口同时打开的文件是同一
个文件。
窗口切换
可以使用 ctrl + 连着两次按 w,这样就可以在各个文件中切换
:ls 展示全部的打开文档
:xn 切换到向下的第 n 个文档
分屏
:new xxx
ctrl + w s 对当前文档内容分屏显示
ctrl + w q 关闭所处分屏
ctrl + w o 仅显示当前分屏内容
ctrl + w j k 上下选择分屏
vim 重复自己的命令
. (小数点) 可以重复上一次的命令
N<command> 重复某个命令 N 次
下面是一些例子:
2dd 删除两行
3p 粘帖文本 3 次
100idesu [ ESC ] 会写下 100 个 desu
. (小数点)重复上一次命令
3. 重复 3 次 ‘desu’ (注意:不是 300)
更强:
要让光标移动的更有效率,你一定要了解下面的这些命令
NG 到第 N 行(注:G 是大写的,一般也可以使用 :N 到第 N 行,如 :137 到第 137 行
gg 到第一行 (注:相当于 1G 或 :1)
G 到最后一行
按单词移动:
w 到下一个单词的开头
e 到下一个单词的结尾
如果你认为单词是由默认方式,那么就用小写的 e 和 w。默认上来说,一个单词由字母,数字,和下划线组成。
如果你认为单词是由 blank 字符分割符,那么你需要使用大写的 E 和 W。
下面说说最强光标移动:
%:匹配括号移动,包括 (,{ , [ (你需要先把光标移到括号上)
* 和 # :匹配光标当前所在的单词,移动光标到下一个(或上一个)匹配单词(* 是上一个,# 是下一个)
以上这三个命令对程序员来说是相当强大的。
更快:
你一定要记住光标的移动,因为很多命令都可以和这些移动光标的命令连动。很多命令都可以如下来干:
<start position><command><end position>
例如:0y$ 命令意味着:
0(数字零) 先到行头
y 从这里开始复制
$ 拷贝到本行最后一个字符
也可以输入 ye,从当前位置拷贝到本单词的最后一个字符。
也可以输入 y2/foo 来拷贝 2 个 foo 之间的字符串
还有很多时间并不一定你就以一定要按 y 才会拷贝,下面的命令也会拷贝:
d (删除)
v (可视化选择)
gU (变大写)
gu (变小写)
等等 (注:可视化选择是一个很有意思的命令,你可以先按 v ,然后移动光标,你就会看到文本被选择,然后,你就可 d,也可以 y,也可以变大写等)
虽然上面的命令可以让你很舒服的使用 VIM 了,但是,下面会介绍一些 VIM 杀手级的功能。
在当前行上移动光标:
0(数字零) 到行头
^ 到本行的第一个非 blank 字符
$ 到行尾
g 到本行的最后一个不是 blank 字符的位置
fa 到下一个字符 a 处,也可以 fs 到下一个字符 s 处。
t, 到逗号前的第一个字符。逗号可以变成其他字符。
3fa 在当前行查找第三个出现 a 的地方
F 和 T 和 f 和 t 一样,只是方向相反。
还有一个很好用的命令是 dt“ 删除所有的内容,直到遇到双引号 ---- “
区域选择 <action>a<object> 和 <action>i<object>
action 可以是任何的命令,如 d(删除),y (拷贝)v(可视化模式选择)
object 可能是:w 一个单词,W 一个以空格为分隔的单词,s 一个句子,p 一个段落。也可以是一个特别的字符: “ 、 ‘ 、)、} 、]
假设你有一个字符串 (map (+) ( " foo")), 而光标键在第一个 o 的位置。
vi“ 会选择 foo
va“ 会选择 “foo"
vi) 会选择 ”foo“
va)会选择(“foo”)
v2i) 会选择 map (+)( "foo" )
v2a) 会选择 (map (+) (”foo“))
块操作: <C-v>
块操作,典型的操作:0 <C-v> <C-d> I-- [ ESC ]
^ 到行头
<C-v> 开始块操作
<C-d> 向下移动,(也可以使用 hjkl 来移动光标,或是使用 %,或是别的)
I -- [ ESC ] I 是插入,插入“ --”,按 ESC 键来为每一行生效
自动提示 : <C-n> 和 <C-p>
在 Insert 模式下,你可以输入一个词的开头,然后按 <C-p> 或是 <C-n>,自动补齐功能就能出现了......
宏录制: qa 操作序列 q,@a,@@
qa 把你的操作记录在寄存器 a
于是 @a 会 replay 被录制的宏
@@ 十一个快捷键用来 replay 最新录制的宏。
实例:
在一个只有一行,且这一行只有 1 的文本中,键入如下命令:
qaYp<C-a>q
qa 开始录制
Yp 复制行
<C-a> 增加 1
q 停止录制
@a 在 1 下面写下 2
@@ 在 2 下面写下 3
现在做 100@@ 会创建新的 100 行,并把数据增加到 103
可视化选择 v, V, <C-v>
前面,我们看到了 <C-v> 的示例,我们可以使用 v 和 V,一旦被选择好了,你可以做下面的事。
J 把所有的行连接起来(变成一行)
< 或 > 左右缩进
= 自动给缩进
PS:此功能在编程使用时,非常强大
在所有被选择的行后加上点东西:
<C-v>
选中相关的行,(可使用 j 或 <C-d> 或是 /pattern 或是 % 等 ......)
$ 到行最后
A 输入字符串,按 ESC
分屏: split 和 vsplit
下面是主要的命令,你可以使用 VIM 的帮助:help split
:split 创建分屏 (:vsplit 创建垂直分屏)
<C-w><dir>: dir 就是方向,hjkl 或是方向键都可以
<C-w>_ (或是 <C-w>| ) 最大化尺寸(<C-w>| 垂直分屏)
<C-w>+ (或是 <C-w>-) 增加尺寸(或是减小尺寸)
分屏启动 vim
使用大写的 O 参数来垂直分屏
vim -On file1 file2 file3 ...
使用小写的 o 参数来水平分屏
vim -on file1 file2 file3 ...
注释: n 是数字,表示分几个屏
关闭分屏:
关闭当前窗口
Ctrl+W + c
关闭当前窗口,如果为最后一个,则退出 VIM
Ctrl+W + q
分屏
上下分割当前打开的文件
Ctrl+W + s
上下分割,并打开一个新的文件
:sp filename
左右分割当前打开的文件
Ctrl+W + v
左右分割,并打开一个新的文件
:vsp filename
要在各个屏之间切换需先按 Ctrl+W,再按 hjkl 或者是方向键,若是按 w 键则为跳到下一个窗口
屏幕尺寸:
下面是改变尺寸的一些操作,主要是高度,对于宽度可以使用 【 Ctrl+W < 】或是 【 Ctrl+W > 】
让所有的屏都有一样的高度
Ctrl+W =
增加高度
Ctrl+W +
减少高度
Ctrl+W -