vim插件网站集合网站:http://vimawesome.com/
该网站基本搜集了所有的vim插件,而且分好各个类别,并且推出最为受人欢迎的各类插件,而且每一种插件都有相应的安装说明。
当然也可以去去vim插件集合网站 http://www.vim.org 查找对应版本的.vim文件,下载到本地。
参考这个文章 https://mp.weixin.qq.com/s/_4plWU86kkbnUk9REF-E0g
在powershell中环境变量的查看与设置可以参考这篇博客
执行
:verbose imap
就可以看到键被谁映射了。
在windows下安装,可以参考这个
首先需要安装git和curl。
在vim中,即使在windows下,vim仍然后查找.vimrc
和~/.vim
,在windows下,.vimrc
会命名为_vimrc
。vim首先会在$HOME下查找。在windows下,可以在vim中使用echo $HOME
来查看这个目录。将_vimrc 和 .vim文件夹
放到$HOME
中。
根据github中的介绍,在_vimrc
中使用这个语句:
set rtp+=$HOME/.vim/bundle/Vundle.vim/
call vundle#begin('$HOME/.vim/bundle/')
就可以使用Vundle来管理插件了。
否则会报找不到Vundle#begin的错误。
地址
Plugin 'jiangmiao/auto-pairs'
If or conflict with another keys or want to bind to another keys, add
let g:AutoPairsShortcutToggle = ''
用于注释的
使用Vundle安装:Plugin 'scrooloose/nerdcommenter'
默认的使用方法:
[count]cc |NERDComComment| 添加注释
[count]cs 添加漂亮注释
[count]cu |NERDComUncommentLine| 取消注释
https://vimawesome.com/plugin/ultisnips
使用Vundle安装:
Plugin 'sirver/ultisnips'
这个插件需要使用python,可以通过在vim中执行:version
来查看,如果结果中的python和python3有一个前面是+
那么就说明支持python。否则无法使用。
如果不支持python,需要重新编译安装vim(多发生在windows上面),作为替代方案,可以使用neovim,这个软件基本兼容vim,并且可以使用对应的插件。neovim的相关内容可以参考另一个博客。
加入以下内容:这里指定了Snippets存放的位置
let g:UltiSnipsSnippetDirectories=['UltiSnips']
let g:UltiSnipsSnippetsDir='c:\User\cq\.vim\UltiSnips'
let g:UltiSnipsExpandTrigger=''
let g:UltiSnipsListSnippets='jj'
let g:UltiSnipsJumpForwardTrigger=''
let g:UltiSnipsJumpBackwardTrigger=''
简单来说,定义的一段 snip 的格式是这样的:
snippet 关键词 “说明” 设定
内容
endsnippet
设定可以有以下选项:
b
代表只有关键词出现在行首时才可以被展开
A
代表可以自动展开,不需要输入trigger键
w
代表可以展开这个词,具体词的定义可以查看:help iskeyword
,直观感觉是这个词必须和前后有空格分隔
i
代表可以忽略前后字节,直接展开关键词
snippet class "class" b
class ${1:Class}{
public:
// constructors, asssignment, destructor
$1();
$1(const $1&);
$1& operator=(const $1&);
~$1();
private:
};
endsnippet
这个例子里面使用了$(1:Class)
代表可以替换的内容。如果不填写则默认为冒号后面的内容。同样可以使用$2,$3
这样就可以使用前后跳转来进
行跳转了。
$0
为最后一个
使用Visual可以使得将选中的内容直接放进Snipp中,这在进行公式输入的时候很方便。
具体方法为在snip中使用${VISUAL}
即可。
一个markdown的例子如下所示
snippet * "italics"
*${1:${VISUAL}}*$0
endsnippet
使用方法为:
对中文支持好像不是太好
对于更多复杂的处理,我们可以借助 python 来替我们完成。在这里我们就举个最简单的例子,插入文件夹里的所有文件名。在 cpp.snippets 开头,我们加入这么一段代码,!p 代表 python,如果你想用 vimscript 的话就是 !v。
global !p
def list_files():
files = []
for f in os.listdir('.'):
if f.endswith(('.cpp', '.h', '.cc')) and not f.startswith('.'):
files.append(f)
return ' '.join(files)
endglobal
在之后,我们加入一段使用的这段 python 代码的 snip。要说明的是,snip.rv 代表的是 python 返回的内容 (snip return value)
snippet ls "list source files" iw
`!p snip.rv = list_files()`
endsnippet
对于github中已经整理好的一个snippets集合,我们可以直接使用。只需要在init.vim
中添加以下内容就可以通过Vundle进行安装了:
Plugin 'honza/vim-snippets'
安装之后默认添加了很多snippets。
对于Ultisnips,我们仍然可以定义我们自己使用的snippets。在Ultisnips中,通过
ft.snippets, ft_*.snippets, or ft/*
的顺序来查找,其中ft就是文件类型,*
代表wildcard,可以匹配任意字符。
因此,我们可以自己建立文件夹,在其中放入自己定义的snippets,例如对于python,我们可以定义python_my.snippets
可以参考这篇文章里面包含了书写latex公式的一些snippets。
需要注意的是在vimrc中,如果存在set paste
那么这个命令使得在insert mode中无法使用键的映射,因此使得tab键无法展开。只需要将其注释掉即可。
# 把这句加到vundle函数里:
Plugin 'itchyny/lightline.vim'
# 把这两句加到函数外面任意地方:
set laststatus=2
let g:lightline = { 'colorscheme': 'powerline', }
该比较工具可以实现比较智能的比较,而不是按照行号进行比较,会将两个文件中的重复部分内容进行对齐。
有时候可能效果不是最好的,但是提供了一种可能。
安装方法:
# 把这句加到vundle函数里:
Plugin 'chrisbra/vim-diff-enhanced'
使用:
:PatienceDiff
- 在后续的比较模式中,将使用 Patience Diff algorithm
:EnhancedDiff
- 使用 指定算法进行比较,算法可以使用以下值:
myers
默认的diff算法default
默认算法histogram
速度较快的版本minimal
尽量减少不同patience
Patience diff algorithm.:EnhancedDiffDisable
使用vim自带diff工具
该插件兼容neovim