当前位置: 华文星空 > 知识

Vim 有什么奇技淫巧?

2015-01-12知识

我觉得vim命令是一个让人又爱又恨的东西,突然从Windows下的鼠标操作切换到vim的Linux操作会感觉很不方便,有的时候甚至会误操作导致很大的坑。但是用习惯后再回到window下回发现会不自觉的使用这些命令,可见,这些命令的确带来了便携性,vim命令有很多,一下子也记不完,这里我就总结一些我个人常用的命令及高效用法。

程序员必备宝藏库 :https:// github.com/Jackpopc/CS- Books-Store

1. 注释

手动输入注释符:

单行注释:可以直接在行前添加注释符比如 # 多行注释:ctrl+v 进入视图模式, 然后shift+i,输入注释符,最后按Esc

也可以使用替换命令,详细的请看第3条:

# 注释,以Python为例 :m,ns/^/#/g # 注释m到n行 # 解除注释 :m,ns/^#//g # 注释整个文档 :1,$s/^/#/g # 还有更高效快速的方法 :%s/^/#/g

2. 多窗口

写代码过程中要打开多个窗口,如果反复关闭开启会很麻烦,vim可以使用多窗口

直接打开多个文件:

# 纵向分割窗口 vim -On file1 file2 ... # 横向分割窗口 vim -on file1 file2 ...

已经打开一个文件之后再大开一个文件:

# 可以打开本地文件 :e file # 也可以打开远程文件 :e ftp://host/*

多窗口切换文件:

下一个文件:bn 上一个文件:bp

在另一窗口分割打开文件:

:split file

多窗口之间的切换:

# 依次切换 ctrl+w+w # 双击w # 指定方向切换 先ctrl+w,按上下左右键选择

调整窗口尺寸:

# 增大或减小窗口宽度 ctrl+w, <\> # 也可以ctrl+w, n,<\> 其中n是增大或减小的n行 # 增大或减小窗口高度 ctrl+w, +\- # 也可以ctrl+w, n,+\- 其中n是增大或减小的n列

3. 查找与替换

# 查找字符串 /str # 替换 # 替换当前行,其中g是替换标志,代表global的意思,也可以换成c:需要确认;i:大小写不敏感;I:大小写敏感 :s/old/new/g # 全局替换 :%s/old/new/g # 替换特定行 :m,ns/old/new/g # 选择区域替换 :'<,'>s/old/new/g #先visual模式下选择要替换的区域 # 详细内容可以访问下面链接

4. 与shell交互

临时退出:ctrl+z

回到vim:fg

执行shell命令:

# 命令模式下 :! ls ./

5. 插入

# 在当前行首插入 I # 也就是shift+i # 在当前位置行尾插入 A # 在当前字符所在位置插入 i # 在当前字符之后插入 a # 在当前行的前一行插入 O # shift+ o # 在当前行的后一行插入 o

6. 撤销和重做

# 撤销操作 u # 撤销对整行的操作 U # 重做(把撤销的动作撤销) ctrl+r

7. 移动

# 移动到文本头部 gg # 移动到尾部 G #Windows下同shift+g # 向前移动一个单词 w # 2w移动两个单词 # 向后移动一个单词 b # 移动到行首 0 # 移动到行尾 $ # 移动到段落头部 ( # 移动到段落尾部 ) # 将当前行移动到屏幕中间 zz # 到屏幕尾行 L # 到屏幕中间 M # 到屏幕首行 H

8. 对比差异

这一点和beyond compare类似:

vim -diff file1 file2

没有详细总结,临时就想起这么多,后续会持续更新。 属性设置

可以对vim属性设置,使得每次打开vim时都能起作用,基本的属性设置比如高亮、缩进等,先贴上我的设置:

1. 进入home路径下

cd ~

2. 创建.vimrc文件

touch .vimrc vim .vimrc

3. 粘贴以下内容

set nocompatible set number set ic set hlsearch set encoding=utf-8 set fileencodings=utf-8,ucs-bom,GB2312,big5 set autoindent set smartindent set scrolloff=2 set showmatch set shiftwidth=4 set tabstop=4 set showmatch set cursorline set autoread syntax on

这样保存退出后就生效了,网上有很多这一类的教程,创建.vimrc的作用是保证每次启动vim都可以起作用。 插件

工欲善其事必先利其器,无论是做Python还是c++开发,如果有一个好的IDE,那么效率将会得到大大的提升,如果想把vim用于轻量级IDE,那么插件是必不可少的,以下以vim配置Python3为例。

1. 检查vim版本是否符合

vim --version

在输出的信息检查以下是否有'+python3'字眼,如果没有说明vim版本太低不支持,需要卸载重新安装vim。

2. 安装Vundle插件管理器

个人认为Vundle 就如同maven之于Java、npm之于js、pip之于Python,安装了Vundle后方便后续安装插件。

首先克隆到指定目录:

git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim

如果克隆失败可以参考我的另外一篇文章

其次,在~/.vimrc中输入如下内容:

set nocompatible " required filetype off " required " set the runtime path to include Vundle and initialize set rtp+=~/.vim/bundle/Vundle.vim call vundle#begin() " alternatively, pass a path where Vundle should install plugins "call vundle#begin('~/some/path/here') " let Vundle manage Vundle, required Plugin 'gmarik/Vundle.vim' " Add all your plugins here (note older versions of Vundle used Bundle instead of Plugin) " All of your Plugins must be added before the following line call vundle#end() " required filetype plugin indent on " required

上述 Add all your plugins here (note older versions of Vundle used Bundle instead of Plugin)下面的一段空白处是用于添加其他插件。

3. 安装插件

首推 YouCompleteMe ,这个插件用于自动补全,速度补全速度可以达到pycharm的级别,但是这个插件安装十分麻烦,可以参考我的另外一篇文章:

另一篇文章链接如下:

然后在~/.vimrc中添加

Plugin 'Valloric/YouCompleteMe'

保存退出重新打开,在命令模式下输入:PluginInstall即可安装,左下角显示Done!即为完成,可以在紧接着下面添加如下设置:

let g:ycm_global_ycm_extra_conf = "~/.vim/bundle/YouCompleteMe/cpp/ycm/.ycm_extra_conf.py" let g:ycm_key_invoke_completion = '' let g:ycm_min_num_identifier_candidate_chars = 2 let g:ycm_goto_buffer_command = 'horizontal-split' let g:ycm_seed_identifiers_with_syntax=1 map <F2> :YcmCompleter GoTo<CR> # 按F2跳转到定义处 let g:ycm_error_symbol = '>>' let g:ycm_warning_symbol = '>*'

其次是 Autoformat 这是一个自动格式化代码的工具,事先需要安装pep8:

pip install autopep8

其次在vimrc空白处添加:

Plugin 'Chiel92/vim-autoformat' nnoremap <F6> :Autoformat<CR> # 按F6自动格式化 let g:autoformat_autoindent = 0 let g:autoformat_retab = 0 let g:autoformat_remove_trailing_spaces = 0

保存并退出,重新进入vim,命令模式下输入:PluginInstall

还有 nerdtree 这是一个目录树插件,可以给代码添加目录:

Plugin 'https://github.com/scrooloose/nerdtree' nnoremap <F3> :NERDTreeToggle<CR> # 按F3显示或隐藏目录 autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif

还有 indentLine ,这是一个缩进线插件,对于Python这种缩进要求很严格的语言来说很重要:

Plugin 'Yggdroot/indentLine' let g:indentLine_char='┆' let g:indentLine_enabled = 1

注意:把上述内容添加到vimrc后需要关闭后重新打开,在命令模式下输入:PluginInstall,也可以用:Plugin '插件',例如:Plugin 'Yggdroot/indentLine'