当你有一个服务器,或者运维若干服务器时,没有什么比不够熟练 vim 更让人难受和窝心的事情了。而在各类编辑器中 vim 模式也大受欢迎。所以,学习 vim 是颇有必要的。linux
本章节没有关于服务器中的实践内容,只是须要简单操做以及熟练使用 vim。git
本章旨在如何快速的上手 vim,主要体如今如下三个方面程序员
掌握了vim 无插件零配置的操做,也能大大提升程序员在各类编辑器中敲代码的效率。github
了解了 vim 经常使用的配置,你将把 vim 用的很舒服,如沐春风。正则表达式
了解了经常使用插件,你将能够把它打形成一个适合本身的 IDE 工具。但每每来讲,它对于服务器运维好处有限,对敲代码的程序员,每每也不如一个专用语言的 IDE 工具强大。不过,它有一个最大的好处,就是能够知足马斯洛需求层次理论中的自我需求: 装逼。这也是我会使用它的缘由。编程
如下是我在使用 vim 过程当中天天都会使用无数次的高频操做vim
:w
快速保存<C-[>
退出 insert 模式,与 esc
相似0
快速移动到行首gg
快速移动到文件首G
快速移动至文件尾<c-o>
移动至最近一次位置zz
把光标移动至本屏中间:12
快速移动至特定行dd
剪切本行yy
复制本行yi{
复制括号中内容=i{
自动缩进<c-p>
自动补全"*yy
复制到系统剪切板*
快速查找关键字,相似于sublime/vscode 的 Command + d
:noh
取消关键字高亮o
快速进入 insert 模式,并定位到下一行u
撤销快速移动是 vim 的重中之重,比一切插件都要重要。也是下编辑和修改的基础。后端
上(k)下(j)左(h)右(l) 移动,须要注意,禁止使用上下左右箭头服务器
若是须要移动数行,能够在操做前加数字。如 10j
表明往下移动十行。 经过数字与操做结合,这是 vim 的思想。app
减小上一步的左右移动,效率过低,使用 b, B, w, W
代替
b
指 back a word,退回一个单词。w
指 forward a word,前进一个单词。 B
指 back a WORD,退回一个大单词。w
指 forward a WORD,前进一个大单词。
其中,word 以及 WORD 的区别,以一个示例说明。 hello.world 有三个 word ('hello', '.', 'world'),却只有一个 WORD。
使用 f, F, t, T
进行更为精细的左右移动控制
f
指 find a character,快速移动到下一个字符的位置,F
指向前查找。结合 b, w
实现快速左右移动。 t
指 tail a character,快速移动到下一个字符位置的前一个字符,T
指向前查找。
使用 0, $
进行行首行尾移动
使用 %
快速移动到配对字符
如从左括号快速移动到右括号,左引号快速移动到右引号,在编码中最为经常使用!
使用 <Ctrl-d>,<Ctrl-u>
进行大范围上下移动
<Ctrl-d>
往下移动半页,<Ctrl-u>
往上移动半页。
也可使用
<Ctrl-f>, <Ctrl-b>
进行整页移动。
使用 gg, G
进行首行尾行移动
:128
表示快速定位到 128 行,目前只在 debug 中使用
zz
快速定位当前光标至当前屏幕中间,zb
定位当前光标至屏尾,zt
定位当前光标至屏首
*
定位当前光标下的单词,并指向下一个,#
指向上一个
gd
在编码中经常使用,定位当前变量的申明位置,gf
定位到当前路径所指向的文件。
最后若是你发现定位错了,可使用 <Ctrl>-o
回到光标的上一位置
vim 的编辑在 Insert Mode
,以上的快速移动是在 Normal Mode
。编辑文本须要首先进入 Insert Mode
。
i, I, a, A, o, O
进入 Insert Mode
。
i
指 insert text,在该光标前进行编辑,I
指在行首进行编辑。 a
指 append text,在该光标后进行编辑,A
指在行尾进行编辑。 o
指 append text,在该光标后一行进行编辑,O
指在光标前一行进行编辑。
我的习惯,i, A, o, O
用的多一些,I, a
基本不用。
Esc
以及 <Ctrl-[>
均可以退出 Insert Mode
。
我的习惯使用 <Ctrl-[>
,一来 Esc
过远,二来在一些编辑器中 Esc
容易与其它热键冲突。
删除也能够在 Insert Mode
使用 delete
键进行手动删除,不过效率过低,建议通常在 Normal Mode
进行删除,刚进入 vim 的状态即是 Normal Mode
。
使用 x(dl)
删除特定字符
能够结合 x
以及上述所讲的快速移动,删掉光标下的特定字符
在括号里标注 l
,意指 x
为 dl
的简写。
d
指 delete
,表示删除,是全部修改操做的基础。dl
由 d
和 l
两个操做组成,表明删掉光标右侧的字符,同理,dh
表明删掉光标左侧的字符,这是全部删除的基本形式,也是 vim 的核心思想。
使用 daw
删除特定单词
daw
指 delete a word
,表示删除特定单词。一样也可使用 db, dw
来删除单词。
使用 dt, df
加特定字符,删掉字符前的文本
使用 di(, da(
删除特定符号内的文本,如删除括号,引号中的文本
di(
指 delete in (
,不会删掉括号。da(
指 delete a (
,会连同括号一同删掉。同理还有 di'
,di"
等,在编码中最为经常使用!
使用 D (d$)
删除掉该字符之后的全部文本
使用 dd
删掉整行
把以上操做的全部 d 替换为 c,表示删除后进入编辑模式
c
指 change
,表示删除,如 d
同样,是 vim 的基本动词
使用 r
加特定字符,表示使用特定字符代替原有字符
使用 :Ex (Explore)
浏览目录
定位到文件所在行,回车进入指定文件
使用 :ls
列出缓冲列表
缓冲列表中保存最近使用文件,行头有标号
使用 :bn
进入最近使用文件
bn
指 buffer next
,进入缓冲列表的下个缓冲,即最近一次使用文件
使用 :b[N]
进入缓冲列表中标号为 N 的文件
b 10
指 buffer 10
,进入缓冲列表,即最近一次使用文件
使用 :sbn, :vbn
在新窗口打开最近使用文件
s
指 split
,水平方向。 v
指 vertical
,垂直方向。
使用 :on(ly)
只保留当前窗口
基本操做指查找,替换,撤销,重作,复制,粘贴,保存等
/{pattern}
查找
/
后加须要查找的词或者正则表达式进行查询,n
向下查询,N
向上查询。
:s/aa/bb/g
替换
s
指 substitute
的缩写,替换,g
表明全局替换。
u
撤销
u
指 undo
的缩写,撤销。可与数字结合进行屡次撤销。
<Ctrl-r>
重作
yy
复制整行
y
指 yank
,复制。使 y
与快速移动结合起来,可使用多种状况的复制,如复制括号中内容,复制引号中内容。
复制时,会把当前内容置入寄存器,使用 :reg
查看寄存器列表。
p
粘贴
p
指 paste
,粘贴。
"*y
复制内容至系统剪切板
:reg
会列出寄存器列表,"*
寄存器表明系统剪切板(),因此以上就是把内容放到系统剪切板。
若是寄存器列表中没有该寄存器,则 vim 不支持系统剪切板,也可使用命令 vim --version | grep clipboard
。
"*p
粘贴系统剪切板中内容
set expandtab
set smarttab
set shiftwidth=2
set tabstop=2
复制代码
当关闭文件并再次进入时,可使用 u
进行撤销动做
set undofile
set undodir=~/.vim-config/undo_dirs
复制代码
" 不产生交换文件(当打开一个文件未正常关闭时会产生交换文件)
set noswapfile
复制代码
如下是在 个人vim配置 中所使用的插件,关于快捷键有可能通过我自定义。
文件管理器
,nn
切换文件管理器窗口,相似于sublime的 Command + k + b
,nf
定位当前文件的位置在文件管理窗口
ma
新建文件或文件夹md
删除文件或文件夹I
切换隐藏文件显示状态ctrlp,相似于sublime的ctrlp
<c-p>
在当前项目下查找文件,b
在buffer中查找文件,f
在最近打开文件中查找在ctrlp窗口中,<c-j>
和 <c-k>
控制上下移动。
查找关键字,相似于sublime的 Command + Shift + f
Ag key *.js
在特定文件下查找关键字注:首先须要安装 the_silver_searcher
注释命令
:gcc
注释当前行,相似于sublime的 <c-/>
git扩展
:Gblame
查看当前行的归属:Gdiff
查看与工做区文件的差别:Gread
至关于 git checkout -- file
:Gwrite
至关于 git add file
语法检查插件,设置eslint
:SyntasticCheck
语法检查,默认会在保存时进行语法检查,不过会有卡顿:lne[xt]
下一处语法错误:lp[revious]
上一处语法错误:! eslint %:p --fix
自动修正错误<c-y>,
相似于sublime的 <c-e>
括号,引号自动补全
:Goyo
切换至 gotyo 模式可更改配置文件中 background 为 dark
和 light
切换主题
经过本章你能够很熟练地在服务器中使用 vim 编辑文本,若是有必要的话还能够在 linux 中使用 vim 进行编程。可是在服务器中除了须要熟练地使用 vim 外,更须要应付多窗口管理,能够参考下一章 tmux 与多窗口管理。
欢迎关注公众号山月行,我会按期分享一些先后端以及运维的文章,而且会有技术与生活上的每日回顾与总结,欢迎关注交流