VIM常用插件介绍

文章目录

  • 插件安装
  • 知识备用
    • vim快捷键冲突
  • 推荐插件
    • 插件管理 Vundle
    • Auto Pairs
      • 使用简介
    • NERD Commenter
    • UltiSnips
      • 先决条件
      • 配置vimrc
      • 语法介绍
        • 简单的例子
        • 跳转
        • Visual
        • 使用python
      • snippets管理
        • 常用snippets
      • 问题
        • 无法展开
    • lightline 状态栏
    • 比较工具 vim-diff-enhanced

插件安装

vim插件网站集合网站:http://vimawesome.com/
该网站基本搜集了所有的vim插件,而且分好各个类别,并且推出最为受人欢迎的各类插件,而且每一种插件都有相应的安装说明。
当然也可以去去vim插件集合网站 http://www.vim.org 查找对应版本的.vim文件,下载到本地。

参考这个文章 https://mp.weixin.qq.com/s/_4plWU86kkbnUk9REF-E0g

知识备用

在powershell中环境变量的查看与设置可以参考这篇博客

vim快捷键冲突

执行
:verbose imap
就可以看到键被谁映射了。

推荐插件

插件管理 Vundle

在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的错误。

Auto Pairs

地址

Plugin 'jiangmiao/auto-pairs'

使用简介

If or conflict with another keys or want to bind to another keys, add

let g:AutoPairsShortcutToggle = ''

NERD Commenter

用于注释的

使用Vundle安装:Plugin 'scrooloose/nerdcommenter'

默认的使用方法:

[count]cc |NERDComComment| 添加注释

[count]cs 添加漂亮注释

[count]cu |NERDComUncommentLine| 取消注释

UltiSnips

https://vimawesome.com/plugin/ultisnips

使用Vundle安装:
Plugin 'sirver/ultisnips'

先决条件

这个插件需要使用python,可以通过在vim中执行:version 来查看,如果结果中的python和python3有一个前面是+那么就说明支持python。否则无法使用。

如果不支持python,需要重新编译安装vim(多发生在windows上面),作为替代方案,可以使用neovim,这个软件基本兼容vim,并且可以使用对应的插件。neovim的相关内容可以参考另一个博客。

配置vimrc

加入以下内容:这里指定了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

使用Visual可以使得将选中的内容直接放进Snipp中,这在进行公式输入的时候很方便。

具体方法为在snip中使用${VISUAL}即可。

一个markdown的例子如下所示

snippet * "italics"
*${1:${VISUAL}}*$0
endsnippet

使用方法为:

  1. 在visual模式下选中内容,按下展开键
  2. 输入展开关键字,然后按下展开键

对中文支持好像不是太好

使用python

对于更多复杂的处理,我们可以借助 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

snippets管理

对于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

常用snippets

可以参考这篇文章里面包含了书写latex公式的一些snippets。

问题

无法展开

需要注意的是在vimrc中,如果存在set paste 那么这个命令使得在insert mode中无法使用键的映射,因此使得tab键无法展开。只需要将其注释掉即可。

lightline 状态栏

# 把这句加到vundle函数里:
Plugin 'itchyny/lightline.vim'

# 把这两句加到函数外面任意地方:
set laststatus=2
let g:lightline = { 'colorscheme': 'powerline', }

比较工具 vim-diff-enhanced

该比较工具可以实现比较智能的比较,而不是按照行号进行比较,会将两个文件中的重复部分内容进行对齐。

有时候可能效果不是最好的,但是提供了一种可能。

安装方法:

# 把这句加到vundle函数里:
Plugin 'chrisbra/vim-diff-enhanced'

使用:
:PatienceDiff- 在后续的比较模式中,将使用 Patience Diff algorithm
:EnhancedDiff - 使用 指定算法进行比较,算法可以使用以下值:

  • myers 默认的diff算法
  • default 默认算法
  • histogram 速度较快的版本
  • minimal 尽量减少不同
  • patience Patience diff algorithm.

:EnhancedDiffDisable 使用vim自带diff工具

该插件兼容neovim

你可能感兴趣的:(vim)