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]可以是gcpg:表示全局替换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:删除当前行之后,进入插入模式。