如何让 Vim 成为我们的神器
2017-10-24
(点击上方公众号,可快速关注)
来源:枫上雾棋
segmentfault.com/a/1190000011466454
如有好文章投稿,请点击 → 这里了解详情
Vim 是一个上古神器,本篇文章主要持续总结使用 Vim 的过程中不得不了解的一些指令和注意事项,以及持续分享一个前端工作者不得不安装的一些插件,而关于 Vim 的简介,主题的选择,以及为何使用 vim-plug 来管理插件等内容,有兴趣的同学下来可以自己了解和对比下
安装
sudo apt-get install vim // Ubuntu
其他平台,可以自行谷歌
新手指南
vimtutor // vim 教程
上面是史上最简单,最全面的 Vim 基础教程,至今无人超越
下面是作者基于上面的归纳
移动光标
hjkl
2w 向前移动两个单词
3e 向前移动到第 3 个单词的末尾
0 移动到行首
$ 当前行的末尾
gg 文件第一行
G 文件最后一行
行号+G 指定行
<ctrl>+o 跳转回之前的位置
<ctrl>+i 返回跳转之前的位置
b、3b、w、3w:向前\后移动几个单词,标点也算一个单词。相应的大写状态为不含标点,即只把空格和换行符作为单词间隔符。
$:移动到行尾 3$:移动到3行后的行尾
^:移动到行首,0也是
+:移到下一行的行首
-: 移到上一行的行首
f:搜索命令,小写时向后搜索(用来定位)如 fx:定位到下一个x上。 Fx:定位到上一个x上,重复时,可用;或, 不过 , 表示反方向
%:跳到相对应的括号上,编程时常用
33G:跳转到33行 此时按``可以返回到原来行
gg:文件头 G: 文件尾
30%:跳转到文件的30%处
"H"意为Home, "M"为Middle, "L"为Last. 当前屏幕的上中下位置,大小写皆可
Ctrl+G:显示当前位置
set number:设置显示行号,set nonumber:关闭显示
:set ruler 设置在窗口右下角显示行号,与上面的好处是,节省空间
ctrl+u\d 向上\下滚动半屏
ctrl+e\y 向上\下滚动一行
ctrl+b\f 向上\下滚动一屏 这个比较实用,记住。
zz:将当前行滚动于屏幕中间,方便查看上下文 zt置顶,zb置尾
/string 查找string,回车后,按n键可以跳到下一个,N上一个,另外按/键后,按上下键可以找到以前查找的记录,同样的 :也有记录
?/string 同上,默认向上查找
:set ignorecase 大小写无关
:set noignorecase 大小写敏感
- :查找下一个光标所在单词 #是查找上一个
:set hlsearch 高亮显示查找结果
:set nohlsearch 取消高亮
:nohlsearch 去掉当前显示的高完(一次性)
`` 上次光标停靠的行
% 匹配到相应括号处
向右移动本行一段距离 << 向左移动本行一段距离 3<< 把下面3行(包括本行),向左移动一段距离 :20,30>> 把20行到30行向右移动一段距离
退出
<esc> 进入正常模式
:q! 不保存退出
:wq 保存后退出
删除
x 删除当前字符
dw 删除至当前单词末尾
de 删除至当前单词末尾,包括当前字符
d$ 删除至当前行尾
dd 删除整行
2dd 删除两行
修改
i 插入文本
A 当前行末尾添加
r 替换当前字符
o 打开新的一行并进入插入模式
i 在光标前插入
I 在行首插入
a 在光标后插入
o:在当前行的下面另起一行,并变为插入模式
O:在当前行上面另起一行,变为插入模式
Ctrl+o:临时变成命令模式(一次而已)
:10,20y 回车即可,相应的删除也是如此 :10,20d (此方法比上面两种方法更简单)
:10,20 m 30 把10行到20行的内容,剪切到30行之后
:10,20 co 30 把10行到20行的内容,复制到30行之后
将光标放在 { 处,然后输入v%就可以把大括号中内容选定
撤销
u 撤销
<ctrl>+r 取消撤销
复制粘贴剪切
v 进入可视模式
y 复制
p 粘贴
yy 复制当前行
dd 剪切当前行
状态
<ctrl>+g 显示当前行以及文件信息
查找
/ 正向查找(n:继续查找,N:相反方向继续查找)
? 逆向查找
% 查找配对的 {,[,(
:set ic 忽略大小写
:set noic 取消忽略大小写
:set hls 匹配项高亮显示
:set is 显示部分匹配
替换
:s/old/new 替换该行第一个匹配串
:s/old/new/g 替换全行的匹配串
:%s/old/new/g 替换整个文件的匹配串
执行外部命令
:!shell 执行外部命令
.vimrc
.vimrc 是 Vim 的配置文件,需要我们自己创建
cd Home // 进入 Home 目录
touch .vimrc // 配置文件
Unix
vim-plug
Vim
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
Neovim
curl -fLo ~/.local/share/nvim/site/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
其他平台,可以查看 vim-plug
基本配置
取消备份
set nobackup
set noswapfile
文件编码
set encoding=utf-8
显示行号
set number
取消换行
set nowrap
显示光标当前位置
set ruler
设置缩进
set cindent
set tabstop=2
set shiftwidth=2
突出显示当前行
set cursorline
查找
set ic
set hls
set is
左下角显示当前 vim 模式
set showmode
代码折叠
启动 vim 时关闭折叠代码
set nofoldenable
主题
syntax enable
set background=dark
colorscheme solarized
插件配置
树形目录
Plug 'scrooloose/nerdtree'
Plug 'jistr/vim-nerdtree-tabs'
Plug 'Xuyuanp/nerdtree-git-plugin'
autocmd vimenter * NERDTree
map <C-n> :NERDTreeToggle <CR>
let NERDTreeShowHidden=1
let g:NERDTreeShowIgnoredStatus = 1
let g:nerdtree_tabs_open_on_console_startup=1
let g:NERDTreeIndicatorMapCustom = {
\ "Modified" : "✹",