VIM小技巧合集(持续更新)
Leader键
参考:http://learnvimscriptthehardw...
Vim的默认Leader前缀是\
键。
说白了,就是一个快捷命令的前缀。
一般比如cc,dd之类都被占用,映射起来不方便。所以加上前缀
后,就可以追加各种自己喜欢的快捷命令了。
Vim注释的方法
Vim里面注释对初学者真是比较头疼的事情。需要先$跳到行头,i插入模式,输入注释,Esc退出插入模式。如果批量就更麻烦。下面是几种常用方法。
- 原生方法一
Ctrl+v
进入Block选择,向下移动选择待注释行,Shift+i
批量插入,输入注释符,按两次Esc退出,等几秒实现批量注释。
.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
。
- 插件法
常用插件有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
找到~/.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左下角总显示"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 文件操作
# 新建文件/打开文件 : 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