vim是终端的编辑器,以下场景需要使用到vim:
(1)当使用ssh登陆服务器的时候,基本只能通过vim编辑文件了
(2)git commit 提交编写提交信息的时候也会使用到vim
(3)当在终端操作的同时想要编辑文件可直接通过vim编辑,不用额外切到另外一个编辑器
笔者平时开发也是使用的vim,考虑到它的纯粹和简单,以及很方便的命令操作。它也是Linux环境(Mac/Ubuntu)开发必需要掌握的一个工具,有些公司的前端招聘明确要求熟悉Linux环境开发,特别是需要开发Node.js的时候,所谓Linux环境一般就是指熟练使用终端的命令。不管怎么样,vim是做为程序员一个很基本的编辑器,只要是Linux就会有vim,可能没有VS Code/Sublime,但一定会有vim,有一个程序员的笑话——如何产生一个随机字符串?让新手退出vim。可见vim在程序员界的重要性。
1. 配置VIM
首先配置vim,编辑文件~/.vimrc,如果没有则新建一个,粘贴以下内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
" 语法高亮 syntax on " 记住上一次编辑的位置 autocmd BufReadPost * \ if line("'\"") > 0 && line("'\"") <= line("$") | \ exe "normal! g`\"" | \ endif " 显示当前行的行数的和光标所在字符数 :set ruler " 敲一个tab的时候自动转换成4个空格 :set expandtab :set tabstop=4 " 当delete键不能用的时候加上这个 :set backspace=2 |
第一行配置的作用已在注释说明,因为默认的vim是没有这些东西,例如第一行syntax on可以让vim根据不同的文件名后缀进行语法高亮,而第2行是为了下次打开同一个文件的时候能够返回到一次编辑的位数,而不是默认的每次打开光标都是在第1行,还有把tab转换成4个空格等等。
2. 编辑模式和命令模式
通过以下命令打开一个文件:
vim src/main.js
默认打开是命令模式,按字母i进入编辑模式,编辑好之后,按ESC退出编辑进入到命令模式,这个时候输入冒号”:”,然后输入命令wq就可以退出编辑,w表示write写,q表示quite退出。(vim是vi的升级版)
以下操作如果没有特别说明都是在命令模式下操作。
3. 进入编辑模式
进入编辑模式除了按”i”键之外,还可以按字母”o”键,进入编辑模式,并且在当前行的下方插入一行,而大”O”键是在当前行的上方插入一行。
4. 光标定位
编辑前经常要做的事情是把光标定位到需要编辑的位置
(1)定位到行首
如果想要在行首编辑,可以在命令模式下按下”^”键,即shift + 6就可以跳到当前行的行首了。
(2)定位到行尾
定位到行尾是按”#”键,即shift + 3
(3)定位到特定字符
这个时候可以使用搜索,命令模式下,输入”/”,然后输入想要查找的字符串,如”encodeURI”,光标就会跳到下一个指定字符串。
(4)跳到上一个和下一个字符串
有时候要看一下某个函数在下一个使用的地方,然后做些修改,这个时候可以把光标定位在需要查找的单词前面,然后按”*”键,就能够跳到下一个单词的位置,而按”#”,是跳到上一个出现这个单词的位置。
(5)跳到下一页
跳到上一页按Page Up键,如果键盘没有这个键的话按fn功能键 + 箭头向上键,跳到下一页则按箭头向下箭。
(6)跳到指定行
如跳到第100行,按”:”号,输入100,按回车就跳到100行,如果当前文件不够100行,那么就跳到最后一行。跳到第一行输入1,而跳到最后一行可输入”$”。
(7)返回上一次的位置
按”,即两次单引号,可以跳到上一次的位置,这个位置可由上面1 ~ 6的方式的方式跳过去的。这个好处是很方便地返回,例如当你不断地按*跳到下一下字符串,有时候跳过了就可以按”跳回去,或者按/查找某个字符串的时候,找到了然后想回去之前编辑的位置也可以用这个方式跳回去。
5. 编辑内容
(1)批量插入
例如想要把以下文本:
1 2 3 4 |
苹果 梨 香蕉 草莓 |
变成:
1 2 3 4 |
<p>苹果</p> <p>梨</p> <p>香蕉</p> <p>草莓</p> |
可以这样,第一步是在每行前面插入<p>,进入到命令模式,把光标定位到第一行行首,然后按v,再按箭头向下键一直到最后一行,按大I进入编辑,在第一行输入<p>再按ESC退出,其它行就会自动填入第一行的内容。这样每一行行首就会有”<p>”,而在行尾加上</p>可以使用批量替换。
(2)批量替换
使用正则表达式进行批量替换,在命令模式下输入”:”,然后再输入:
1,4s/$/<\/p>/g
“1,4”表示第1行到第4行,”s”表示替换,后面为正则表达式,表示在每行行尾后面插入</p>。如果是整个文件替换的话,可以把”1,4″换成”%”,表示从第一行到最后一行(最后一行也可用”$”表示):
%s/$/<\/p>/g
这个批量替换的命令非常好用,也可以这样用——把每一行结尾的” +删掉:
1 2 3 4 5 6 7 |
let tpl = ` <p>hello</p> " + <p>world</p> " + <p>goodbye</p> " + <p>world</p>"; `; |
要变成:
1 2 3 4 5 6 7 |
let tpl = ` <p>hello</p> <p>world</p> <p>goodbye</p> <p>world</p> `; |
可以输入:
:%s/” +$//g
这样可以把每行的” +给删了,蛭后一行的”;可以手动删,或者把替换的正则改一下,改成:
:%s/” +\|”;$//g
(3)批量删除
这个和批量插入类似,例如要把以下文本每一行开头的”双引号去掉:
1 2 3 4 5 6 7 |
let tpl = ` "<p>hello</p> "<p>world</p> "<p>goodbye</p> "<p>world</p> `; |
先进入命令模式,然后按v,光标从第一行一直向下到最后一行,然后向右选中双引号,再按d,就可以把每一行行首的双引号删了。
(4)删除当前行
在命令模式下,按”dd”,即连续按两次”d”,就可以把当前行删了,然后移光标到其它行,按”p”键,就可以把刚刚删掉的那一行粘贴到当前光标的下一行。
如果按”d”,再按向下键,可以删除当前行和下一行。
而”yy”是复制当前行。可以按yy,再按p,就在当前行下面插入一行一样的,然后再按i进行修改。
(5)剪切
剪切可以按v,然后移动光标选中需要剪切的内容按x,然后移动光标到相应位置,再按p,就可以粘贴刚刚删掉的内容。按大V可以选中一整行。
(6)录制Recording
录制是一种更高级的命令,可以用来做重复的操作,如上面给每一行文本都插入一个p标签。在命令模式下按q进入录制模式,然后按a-z, 0-9任意字符给当前的录制取个名字如t,接着按i进入编辑,或者其它编辑命令,它就会记录你所有的操作,当操作完之后,再按q退出录制,然后把光标移到另一行,按@t应用录制。
(7)自动补全
在编辑模式下,按ctrl + n可以自动补全,使用当前文件已有的单词.
关于VIM,我常用的基本上就这些。VIM的特点是纯键盘操作,不需要借助鼠标。一方面可能是因为一开始的电脑是没有鼠标的,另一方面,摆拖鼠标的束缚纯键盘操作往往有更快的速度。有些命令虽然看起来步骤比较多,但是当你用熟练了就会很快了。而且不需要记住所有vim的命令,当你在使用过程中遇到不太方便的操作就可以查一下有哪些命令可以解决。
如果你有关于vim其它方便的操作麻烦在下方留言。