Vim usage
vim 配置
- vim 配置文件: vim 首先读取当前用户的配置文件
~/.vimrc
,如果没有则读取 root 用户的配置文件/root/.vimrc
。 - 在
.vimrc
文件中可以配置 vim 的永久属性。.vimrc
文件里面的注释用英文的双引号"
。 - 在文件编辑时,命令模式下可以配置 vim 的暂时属性,即关闭文件则失效。如给当前文件显示行号:
:set nu
常见配置:
set nu
:添加行号。set nonu
:删除行号。set tabstop=4
:设置 Tab 键占 4 个空格。set ai
:自动换行。
vim 常见用法
:w
:保存当前修改。:w new_file
:保存到新文件。当编辑没有权限的文件时,可以利用这个命令将当前修改保存到有权限的新文件中。:w! exist_file
:保存到已有文件。
:q
:退出,当文件没有修改过的时候才有效,如果有修改过,需要保存退出或强制退出。:wq
,:x
:退出,并保存修改。:wq
,不管文件有没有修改,每次执行命令都会更新文件的修改时间;:x
,当文件没有修改过的时候,直接退出,并不更新文件的修改时间。:q!
:强制退出,放弃修改。
查找
/word
:从开头到结尾查找文件中的 “word”。?word
:从结尾到开头查找文件中的 “word”。
查看下一个,按n
;上一个,按N
。
替换
在命令模式下,可以用s
命令来替换字符串:: [option1]s/oldStr/newStr/[option2]
[option2]
可以是g
c
p
g
:表示全局替换c
:表示进行确认再替换
p
:表示替换结果逐行显示(Ctrl + L 恢复屏幕): s/oldStr/newStr/
:替换当前行第一个 oldStr 字符串: s/oldStr/newStr/g
:替换当前行所有 oldStr 字符串: m, ns/oldStr/newStr
:替换从第 m 行到第 n 行中的第一个 oldStr 字符串: n, $s/oldStr/newStr/g
:替换从第 n 行到最后一行的所有 oldStr 字符串: ., $s/oldStr/newStr/
:替换从当前行到最后一行的第一个 oldStr 字符串: %s/oldStr/newStr/g
:替换每一行中所有的 oldStr 字符串: %s/oldStr/newStr/c
:替换每行中的第一个 oldStr 字符串,但是替换需要确认: %s/oldStr/newStr/gc
:替换所有的 oldStr 字符串,但是替换需要确认- 可以使用
#
和+
代替/
作为分隔符,此时命令中出现的/
将作为普通字符处理,如:: s#oldStr/#newStr#
:替换当前行的 oldStr/ 字符串: %s+/oldStr/+newStr
:替换所有 /oldStr/ 字符串
跳到指定行
- 正常模式下,
ngg
或nG
,n
为行号。如跳到 35 行,35gg
。G
可以直接跳到最后一行。 - 命令模式下,
:n
- 如果想打开文件即跳转,
sudo vim +n file_name
- 正常模式下,
复制一(n)行
- 正常模式下,复制光标所在的整行,
yy
;复制 n 行(从光标所在行开始),nyy
。 - 命令模式下,复制从第 n 行到 n + 5 行的内容到第 m 行后面
n, n+5 copy/co m
- 正常模式下,把光标移到要开始复制的那一行
ngg
,然后,计算一下删除哪几行(如,n ~ n+5,包括n和n+5),执行d5
(即删除第 n 到第 n+5 这 6 行)。删除完之后,恢复u
。将光标移到要粘贴的位置,p
。
- 正常模式下,复制光标所在的整行,
粘贴一行
正常模式下,将复制到的内容粘贴到光标所在的行,p
删除一行
正常模式下,删除光标所在的行,dd
删除多行
正常模式下,删除光标所在的行开始的 n + 1 行,dn
。n
的值为最后一行的行号减去开始行的行号。
撤消
在正常模式下,撤消上一步,u
恢复撤消
在正常模式下,恢复撤消的内容,Ctrl + r
光标移动
h
:向左;nh
,向左移动 n 个字符。j
:向下;nj
,向下移动 n 行。k
:向上;nk
,向上移动 n 行。l
:向右。nl
,向右移动 n 个字符。w
:向右移动到下个单词的首个字符处;nw
,向右移动 n 个单词。b
:与w
方向相反。e
:向右移动到下个单词的尾字符处;ne
,向右移动 n 个单词。ge
:与e
方向相反。^
:光标移动到该行的第一个字符处(不包括空格)。$
:光标移动到该行的尾字符处。0
:光标移动到该行的行首。ngg
或nG
:光标移动到 n 行的第一个字符上。gg
:移动到文件首行。G
:光标移动到文件末行。Ctrl + f
:向上翻页。Ctrl + b
- 选择字符
正常模式下,v
,进入可视模式,然后通过光标移动来选择字符。
复制
y
:复制选中的字符,选中字符可以在可视模式下,然后hjkl
选择。ye
:复制当前光标位置到单词结尾的字符内容到 vim 缓冲区。nye
,复制 n 个单词。yw
:复制当前光标位置到下个单词开头的字符内容到 vim 缓冲区。nyw
,复制 n 个单词。y^
:复制当前光标位置到行首的内容到 vim 缓冲区。y$
:复制当前光标位置到行尾的内容到 vim 缓冲区。yy
:复制当前行的内容到 vim 缓冲区。nyy
,复制 n 行。- 复制第 m 行到第 n 行的内容到 vim 缓冲区:命令模式下,
m, ny
- 复制第 m 行到第 n 行的内容到第 k 行后面:命令模式下,
m, n copy/co k
以上复制,都是将内容复制到 vim 剪贴板,而且 vim 具有多个剪贴板,而我们平时操作的复制粘贴是将内容保存到系统的剪贴板。所以,当你想从另外的地方复制了一段内容(如,浏览器某个网址上复制一段内容)到当前 vim 来,是不能够直接用
p
来粘贴的。因为,p
命令是默认粘贴当前 vim 缓冲区的内容。
vim 中的剪贴板内容是保存在 register 中的,在 vim 命令模式下,可以用 reg
命令来查看 register 中的内容。
(ubuntu 16.04)我们可以看到,系统中复制的内容保存在 "*
和 "+
的 register 中。所以,如果我们想要将系统剪贴板的内容粘贴到当前 vim,只需在粘贴命令前添加 register 标记就可以了。
"*p
或"+p
:将系统剪贴板的内容粘贴到光标后面。"*y
或“+y
:将当前 vim 中选中的内容复制到系统剪贴板中。
删除 (非插入模式下)
x
或d
:删除当前光标下的字符。dw
:删除光标之后的单词剩余部分。d$
:删除光标之后的该行剩余部分。dd
:删除当前行。dn
:n
为最后一行的行号减去开始行的行号的值,删除光标所在的行开始的 n + 1 行。c
:删除光标下的字符后,进入插入模式。cc
:删除当前行之后,进入插入模式。