VIM小技巧合集(持续更新)

Leader键

参考:http://learnvimscriptthehardw...

Vim的默认Leader前缀是\键。
说白了,就是一个快捷命令的前缀。
一般比如cc,dd之类都被占用,映射起来不方便。所以加上前缀后,就可以追加各种自己喜欢的快捷命令了。

Vim注释的方法

Vim里面注释对初学者真是比较头疼的事情。需要先$跳到行头,i插入模式,输入注释,Esc退出插入模式。如果批量就更麻烦。下面是几种常用方法。
  1. 原生方法一
Ctrl+v进入Block选择,向下移动选择待注释行,Shift+i批量插入,输入注释符,按两次Esc退出,等几秒实现批量注释。
  1. .vimrc配置文件法

.vimrc中加入如下语句:

" Commenting blocks of code.
autocmd FileType c,cpp,java,scala let b:comment_leader = '// '
autocmd FileType sh,ruby,python   let b:comment_leader = '# '
autocmd FileType conf,fstab       let b:comment_leader = '# '
autocmd FileType tex              let b:comment_leader = '% '
autocmd FileType mail             let b:comment_leader = '> '
autocmd FileType vim              let b:comment_leader = '" '
noremap <silent> ,cc :<C-B>silent <C-E>s/^/<C-R>=escape(b:comment_leader,'\/')<CR>/<CR>:nohlsearch<CR>
noremap <silent> ,cu :<C-B>silent <C-E>s/^\V<C-R>=escape(b:comment_leader,'\/')<CR>//e<CR>:nohlsearch<CR>

然后注释的快捷键是,cc,取消注释是,cu

  1. 插件法

常用插件有NerdCommenter,在vimrc的插件位置中加入Plugin 'scrooloose/nerdcommenter',重新打开vim后输入:PluginInstall后安装成功。
注释的快捷键是\cc,反注释是\cu。其实和自己直接在vimrc中写没什么太大区别。
其它注释插件大同小异,就不都说了。

Vim里Insert模式下不能按Backspace删除前面的内容

因为默认当前插入只能创建新内容,不允许改动别的东西。如果要变成Insert mode下随便编辑的模式,在~/.vimrc中加上:

set backspace=indent,eol,start

或者更简单的set backspace=2,效果一样。

Vim中Tab变Space等相关设置

Tab和Space之争和Vim于Emacs是一样等,我是Vim和Space派。但是我和大多数人一样喜欢按Tab出Space。
~/.vimrc中设置如下,重启vim就会生效:

set autoindent "换行时自动缩排 同时对应的还有其它两种模式 smartindent, cindent
set tabstop=4 "设定tab宽度为4个字符
set shiftwidth=4 "设定自动缩进为4个字符
set expandtab "用space替代tab的输入 取消的话 就用set noexpandtab "不用space替代tab的输入
retab "打开文件时自动转换所有tab为空格

Vim产生的.swp文件

参考文章:VIM不正常退出产生的swp文件
常用关于swp文件的命令或vimrc配置:

  • 查看当前目录下的所有swp文件: vim -r
  • 恢复文件:vim -r filename,上次意外退出没有保存的修改,就会覆盖文件。
  • 停止vim产生交换文件:在~/.vimrc中加入set noswapfile
  • 定时自动保存文件:
set updatetime=23000 " 设置每200个字符保存一次
set updatecount=400 " 设置每4秒保存一次
" set updatecount=0 " 不保存交换文件
  • 设置交换文件默认目录:set directory=./tmp

Vim不会帮你自动保存当前文件,但是它会帮你创建一个缓存文件,一旦不正常退出或掉线,你能通过这个文件快速recover恢复过去。

恢复文件的命令:

# 如果是在vim内
:rec

# 如果是在vim外
vim -r FILENAME

参考:VIM不正常退出产生的swp文件

找到~/.vimrc加入这些内容可以设置缓存文件:

" ---- Swap files (for recovery) ----
set swapfile    "enable swap file
set updatetime=23000   "save swap file every amount of ms
set updatecount=20     "save swp file every amount of characters
set directory=/tmp    "set swp file directory.

Vim自动运行(或编译运行)文件

不像SublimeRepl需要安装插件,Vim原生支持直接运行python等代码。只要输入命令:
:!python %
其它语言代码类似。
输入命令后,vim界面会暂时跳出编辑页面跳到终端页面显示执行过程,期间可以按任意键返回vim编辑页面。
输过一次后,就可以用:!!直接重复上次的命令,不用再输一遍命令。
VIM小技巧合集(持续更新)

为什么Vim左下角总显示"recording"

这是因为不小心按到了q键,进入了录制宏模式。
再按以下q就退出了。

Vim支持鼠标滚动界面

Mac下,Vim支持鼠标滚动光标,通过光标移动上下翻动页面。但是这样太别扭了,我们需要的是滚轮控制界面滚动,如vim中ctrl+e一样的效果。
简单:~/.vimrc中加一句set mouse=a即可。
不过这样设置会导致每次用鼠标选择一段文本都会自动进入visual模式,这样的话我们就没法复制到系统剪切板了。
网上说mouse后一个-好即可,如set mouse-=a,但是试过没用。
这时候,需要按住Alt键然后再用鼠标选择文本,这样一来就不会启动v模式,且可以复制到剪切板。

Vim里批量查找替换文字

没有一般编辑器按快捷键那么方便,需要以输入一条命令的方式才能执行。
格式如下:

  • 对当前行执行替换 :s/查找内容/替换内容/g
  • 在全文执行替换 :%s/查找内容/替换内容/g
  • 对选中行中内容进行批量替换 用v模式选中行然后s/查找内容/替换内容/g

大概可以看到,s代表执行search命令,%代表全文执行,/是相当于分隔符,g代表global对指定范围内所有结果进行替换,如果没有g那么只替换第一个找到的结果。

Vim 文件操作

参考:在 Vim 中进行文件目录操作

# 新建文件/打开文件
: e [FILE-NAME]

# 新建文件 (只打开半个窗口 另半个窗口保留之前的文件)
:new [FILE-NAME]

# 退出 (如果文件更改则保存)
:x

打开目录

:e FOLDER-PATH    " 编辑该目录
:Explore .      " 浏览该目录
:Sexplore .     " 在水平分割窗口中浏览该目录
:Vexplore .     " 在垂直分割窗口中浏览该目录

调用bash命令

# 列出文件
:!ls

# 删除文件
:!rm foo.txt

Vim Recording 录制动作并重复

我不是很喜欢这个词,很简单的东西把它弄复杂了。

Vim记录你的一系列动作很简单,关键字是q。记录并重复一系列的动作,只要这样做:

  • q{0-9a-zA-Z}中任意一个字,比如q1,开始记录动作。
  • 状态栏显示:recording @1
  • 开始做一系列的动作,改词,删字,等等。
  • q,结束当前的记录。
  • @1,重现刚才记录的动作。

Vim鼠标支持问题

Vim高版本默认是支持鼠标滚动的。但是在Tmux中就不可以。

这样可以通过在~/.vimrc中设置set mouse=a来达到开启鼠标支持的左右。
a模式为all,即鼠标的"完全支持模式": 在所有情况下都支持鼠标,包括鼠标定位到某行,定位到某个单词,双击选择单词,三击选择整行,甚至在tmux中也一样。

但是set mouse=a有一个缺点不好解决就是:鼠标选择文字的话,会默认进入Visual模式。

Mac安装带lua、python支持带VIM

brew install vim --with-cscope --with-python --with-lua --override-system-vim

vimrc导入另一个文件

VIM也有source语法,可以用来导入文件:

source ~/.vimrc-keymappings

VIM跳到函数/类定义处

内置:gd

在调用处按gd即可跳转到函数定义处。

需要配合ctags

vim

相关推荐