Vim 4 常用插件

Vim 系列教程目录:

  • Vim 1 基本使用
  • Vim 2 高级用法
  • Vim 3 vimrc
  • Vim 4 常用插件
  • Vim 5 其他编辑器的 Vim 插件

Vim 插件网站

Vim 之所以强大, 有个很大的原因就是他有丰富的插件. 插件可以极大地增强 Vim 的功能. 那么去哪里下载插件呢? 插件怎么安装和管理呢, 听我慢慢道来.

先说到哪里去找插件, 这里列出两个网站:

  • 官方插件网址 界面丑, 速度慢, 有时候还打不开, 不建议使用...
  • VimAwesome 比较推荐的一个插件网站, 好看好用, 每个插件都有介绍, 还有安装方式说明, 以及每个插件官网的链接.

在这些网站上找到合适的插件后, 就可以进行安装了.

插件管理: vim-plug

Vim 本身就提供了安装和管理插件的方式, 但是不太方便, 我就不多说了. 现在比较流行的方式有两种: vim-plug 和 Vundle, 这两款插件都是用于"安装和管理别的插件"的插件.

我最近在用的是 vim-plug, 下面介绍一下它的用法.

安装 vim-plug

安装方式很简单, 下载 plug.vim, 放在 $VIM/vim81/autoload/ 目录中, 就算是完成安装了. 注意: 这里说是下载安装, 其实就是把该插件的源代码保存到名为 plug.vim 的文件, 然后放在对应的目录里就可以了. 官方还提供了使用命令的方式下载安装, 但其实还不如手动下载来得方便.

在 vimrc 中配置

安装好 vim-plug 后, 需要在 vimrc 中进行启用配置和插件配置, 方式如下:

" 以 call plug#begin 开始, 这句命令后面的小括号里用于指定 其他插件的安装目录, 注意不要使用 'plugin' 这种默认名称, 像我这样的写法就行
call plug#begin('$VIM/vimfiles/vim-plug')
" 配置插件, 方式有三种: 
" 1. 插件的短别名(即 Github 中的 用户名/仓库名), 2. 插件的 Github 仓库地址, 3. 本地路径
Plug 'altercation/vim-colors-solarized'
Plug 'nlknguyen/papercolor-theme'
Plug 'scrooloose/nerdtree'
" 以 call plug#end() 结束
call plug#end()
复制代码

上面就是在 vimrc 中启用 vim-plug, 以及配置其他插件的方式. 简单来讲, 按照 VimAwesome 上给出的插件名写就行, 很简单.

插件的安装, 移除, 升级

在 vimrc 中配置好插件之后, 需要使用 vim-plug 的命令进行安装, vim-plug 提供了如下命令, 你可以在命令模式下使用这些命令:

  • :PlugInstall 安装所有插件. 注意: 要安装插件, 需要先在 vimrc 中配置插件名称, 然后执行这个安装命令
  • :PlugClean 移除无用插件. 要移除插件, 需要先在 vimrc 中把要移除的插件名称删掉, 然后执行这个移除命令
  • :PlugUpdate 升级所有插件
  • :PlugUpgrade 升级 vim-plug 本身
  • :PlugStatus 查看插件状态

OK, vim-plug 的使用就是这么简单. 具体更加细节的配置可以参考官方文档, 这里不再赘述.

关于插件依赖的 Python

有些插件需要依赖 Python (比如 UltiSnip), 如果你装了这样的插件, 但是你的 Vim 却不支持 Python, 启动时就会报错(你可以继续使用 Vim, 但是看到报错会很烦).

关于 Python 依赖, 有这么几点需要确认:

  1. 确认 Vim 本身支持调用 Python. 通过 :version 命令, 可以看到 Vim 的版本信息以及支持的特性信息, 如果你能看到如下信息, 则说明 Vim 支持调用 Python:
+python/dyn
+python3/dyn
复制代码
  1. 确认 Vim 支持的 Python 版本, 同样使用 version 命令查看, 在此命令输出的最下面可以看到如下信息:
-DDYNAMIC_PYTHON_DLL=\"python27.dll\"
-DDYNAMIC_PYTHON3_DLL=\"python36.dll\"
复制代码

这说明 Vim 支持 Python 2.7 和 Python 3.6 3. 32位的 Vim 只能调用 32 位的 Python, 同理, 64位的 Vim 只能调用 64位的 Python, 要查看 Vim 的版本, 还是使用 version 命令. 4. 系统中需要安装了对应的 Python 版本. 5. 在命令模式下验证是否真的没问题. 例如 Vim 支持 Python3, 则在命令模式通过 :py3 1 这个命令查看是否真的可以. py3 是 Vim 调用 Python 时使用的命令, 后面的 1 是此命令的参数(可以是任意参数), 如果不报错, 则说明系统中有对应的 Python 版本.

我所使用的 Vim8.1 是 32 位版本, 我之前电脑里装了64位的 3.7, 结果报错, 改为 32 位的 3.6 就没问题了.

主题

主题的话, 这里推荐两款我比较喜欢的主题:

  • PaperColor
  • Dracula

其中 PagerColor 是亮色主题, Dracula 是暗色主题.

PaperColor 有个很好的地方: 同时支持亮色和暗色模式. 可在 vimrc 中做如下配置:

Plug 'nlknguyen/papercolor-theme'
" 启用亮色主题
set background=light
colorscheme PaperColor
" 启用暗色主题
" set background=dark
" colorscheme PaperColor
复制代码

Dracula 是我比较喜欢的一款深色主题, 在 vimrc 中配置的时候要注意:

" 后面的配置表示把 dracula 主题放在 dracula 目录下
Plug 'dracula/vim', { 'as': 'dracula' }
" 启用主题
colorscheme dracula
复制代码

启用主题之后, 你会发现 Vim 变得漂亮多了, 果然人靠衣装.

下面我再介绍一些基本的, 通用的插件.

The NERD tree

目录树插件, 上古神器, 这么多年来一直还在更新, 不容易. 安装就不说了, 自己参照 Awesome 上的名字进行配置即可. 帮助文档: help NERDTree

常用命令

命令含义备注
:NERDTree [dir/bookmark]打开 NERDTree后面可以跟目录/书签作为参数
:NERDTreeToggle打开/关闭 NERDTree
:NERDTreeMirror将当前的 NERDTree 共享到另一个 NERDTree, 二者是同一个 buffer, 互相同步首先得有另一个 NERDTree
:Bookmark [name]将当前节点保存为书签, 可以指定名称必须在 NERDTree 中才可以使用
:ClearBookmark [name]删除书签, 如果不给名称, 则删除当前节点对应书签同上
:EditBookmark编辑所有书签同上

常用指令

以下指令都需要在 NERDTree 中才能生效

指令含义备注
o打开文件/目录/书签如果是在目录上, 则是打开或关闭
i/s在新窗口/垂直新窗口打开文件针对文件的命令
t在新标签打开目录/书签如果是目录, 则自动打开一个新的 NERDTree
m显示 NERDTree 菜单菜单中可以选择添加/删除/修改文件或目录
O递归打开当前节点
x关闭当前节点的父目录
X递归关闭当前节点直到最上层目录
D删除当前 Bookmark针对 Bookmark 的命令
r刷新当前目录
q关闭当前 NERDTree

配置

在 vimrc 中添加如下配置:

" 显示隐藏文件
let NERDTreeShowHidden=1
" 显示书签
let NERDTreeShowBookmarks=1
" NERDTree 大小改为 45 字符宽度, 默认 31
let NERDTreeWinSize=45
" 显示简写的 NERDTree 菜单
let NERDTreeMinimalMenu=1
" 设置箭头样式
let g:NERDTreeDirArrowExpandable='▸'
let g:NERDTreeDirArrowCollapsible='▾'
" 删除文件时自动删除文件对应 buffer
let NERDTreeAutoDeleteBuffer=1
" <leader>h 切换显示
nnoremap <leader>h :NERDTreeToggle<cr>
复制代码

关于 CWD

前面我们介绍过 CWD(Current Working Directory), 当前工作目录. NERDTree 是很依赖 CWD的, 当你打开 NERDTree 的时候, NERDTree 会自动以 CWD 作为根目录显示文件目录. 使用 :NERDTree 命令时, 你可以指定一个目录作为参数, 那么此时这个目录就是 CWD. 如果你不指定目录参数, 则 CWD 就是用户目录.

在 NERDTree 中, 可以在某个目录节点上使用 cd 指令, 将 CWD 更改为指定目录. 不过有时候使用 cd 指令更改 CWD 会导致一些奇怪的问题, 比如 NERDTree 失效了, 此时可以使用 :NERDTree 命令重启 NERDTree.

repeat.vim

. 这个指令只能重复 Vim 原生的上次指令, 如果是自己映射的指令或是插件映射的指令, 是无法重复的. repeat.vim 就是用来解决这个问题的. 无需配置, 装上就能用了, 虽然用处不大, 但是聊胜于无.

surround.vim

上古神器, 可以快速地给文本两边添加成对的符号, 如 ([{" 等等. 帮助文档: help surround

下文我简单介绍下其用法, 我会将成对的符号称为 "surroundings", 这也是官方文档中的称呼

使用方法

  1. 删除 surroundings 指令为 ds (Delete Surroudings), 可以将文本两边的 surroundings 删掉, 用法为 ds<surrounding>, 看下面几个例子(星号表示光标的位置):
Old TextcommandNew Text
"Hello *world!"ds"Hello *world
(123+4*56)/2ds)123+4*56/2
<div>Yo!*</div>dstYo!*

注意, dst 这个指令中, t 是个文本对象, a tag, surround 中的文本对象和 Vim 中的一致.

  1. 改变 surroundings 指令为 cs (Change Surroundings), 可以改变文本两边的 surroundings, 用法为: cs<old surrounding><new surrouding>, 下面给出几个例子:
Old textCommandNew text ~
"Hello *world!"cs"''Hello world!'
"Hello *world!"cs"<q><q>Hello world!</q>
(123+4*56)/2cs)][123+456]/2
(123+4*56)/2cs)[[ 123+456 ]/2
<div>Yo!*</div>cst<p><p>Yo!</p>

除了 cs 指令, 还有一个 cS 指令, 给当前文本替换 surroundings 的时候, 会给当前文本单独 分配一行, 并进行代码格式化.

  1. 添加 surroundings 指令为 ys (You Surroundings), 给文本添加 surroundings, 用法为 ys<text object><surrounding>, 下面给出一些例子:
Old textCommandNew text ~
Hello w*orld!ysiw)Hello (world)!
Ti*tleysiw<h1><h1>Title</h1>
很Geek的做法ysiw<space><space>很 Geek 的做法

有一个特殊指令: yss, 可以对当前行添加 surroundings, 添加时自动忽略两边的空格:

Old textCommandNew text ~
Hello w*orld!yssB{Hello world!}

类似 cS, yS 也可以在给文本添加 surroundings 的时候给文本单独分行并进行代码格式化, 而 ySS 则可以给当前行添加 surroundings, 并且格式化

  1. 可视模式指令 按 v 进入可视模式, 接下来按 S<surrounding> 可以给选中的文本添加 surroundings

我的一些配置

写文档时, 在中英文混输的情况下, 最好在英文单词两边加上空格, 看着比较舒服, 也比较规范, 但是有时候经常忘记, 所以我定义了如下快捷键:

" 给单词两边加上空格
nmap <leader><space><space> ysiw<space><space>
" 给单词左边加上空格
nmap <leader><space>h wbi<space><esc>w
" 给单词右边加上空格
nmap <leader><space>l ea<space><esc>b
复制代码

这些配置依赖 surround.vim, 所以要先装插件. 另外, 有了 repeat.vim 这个插件, 这些指令也是可以使用 . 进行重复的, 很方便.

SuperTab

上古神器, 在插入模式下使用 Tab 键进行补全. 帮助文档: help supertab

用法其实很简单, 这里给一个文档中的例子:

> Example ('|' denotes the cursor location):  
> bar  
> baz  
> b|`<Tab>`    Hitting `<Tab>` here will start the completion, allowing you to  then cycle through the suggested words ('bar' and 'baz').
复制代码

意思就是说, 你先输入过 bar, 又输入过 baz, 当你再次输入 b, 然后按 Tab 键, 会弹出一个候选列表帮你进行补全, 在补全列表出现后继续按 Tab/Shift-Tab, 可以在候选词中循环.

EasyMotion

上古神器, 是对 Vim 移动指令的增强. 帮助文档: help easymotion

这里简单介绍一下用法: 加入你想找到下面这句话中的 amet 这个单词上:

<cursor>Lorem ipsum dolor sit amet.

<cursor> 表示你现在光标的所在处, 你需要输入四次 w. 但是使用 EasyMotion 的话, 你可以使用这个指令: <leader><leader>w, 你会发现每个单词的首字母都被高亮成一个新的不重复的字母了, 你直接按被高亮的那个字母, 就可以跳过去了.

同样的, 如果你想跳到某一个出现字母 o 的地方, 你可以使用 <leader><leader>fo, 那么所有字母o都被高亮成新的字母了, 你直接按下高亮的字母就可以跳过去了.

你试试就知道我的意思了.

CtrlP

上古神器, 用于查找 Buffer, 文件列表, 最近使用文件等, 现在还在缓慢更新, 这几年慢慢的被 fzf 代替了, 但是由于 fzf 配置比较麻烦, 现在我暂时还用 CtrlP. 帮助文档: help CtrlP

用法很简单, 按快捷键 Ctrl-p 可在 Vim 底部打开一个窗口, 然后你可以输入文件名中的字符, CtrlP 会进行模糊匹配查找.

常用快捷键

下面给出几个常用快捷键, 注意下面的快捷键都只能在 CtrlP 的窗口中使用:

快捷键功能备注
Ctrl-j/k在文件列表中上下移动
Ctrl-f/Ctrl-b切换到下一个/上一个搜索模式搜索模式有三个: Buffer, 文件目录, MRU(最近最常使用)
Ctrl-c关闭 CtrlP
F7在 CtrlP 面板中删除光标所在条目(buffer, mru)
Ctrl-s/Ctrl-v在水平/垂直的分割窗口中打开文件
Ctrl-t在新 tab 中打开文件

注意: CtrlP 也很依赖 CWD, 它列出文件目录中的文件时, 也是 CWD 下的文件.

配置

" 默认使用缓冲区搜索模式打开 CtrlP
let g:ctrlp_cmd='CtrlPBuffer'
" 将为多字节字符开启输入事件循环, 用于解决中文文件名的问题(实验特性)
let g:ctrlp_key_loop= 1
" CtrlP 窗口最大高度和最小高度都是 10, 即固定大小
let g:ctrlp_match_window='min:10,max:10'
复制代码

小结

本节介绍了几个常用的插件, 都是很基本和通用的, 不涉及到具体编程语言, 有了它们, 会让你的 Vim 用起来更舒服.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/279432.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[Windows编程] 通过GetModuleHandleEx 得到函数调用者所在的DLL/EXE 原创陈本峰2009-02

在有些情况下需要得到函数调用者的模块名字。比如你想限制你的某个函数只能被自己某个特定的DLL调用。 或者比如在异常处理中你想了解是那个DLL/EXE抛出了异常。API函数_ReturnAddress 和GetModuleHandleEx 函数可以帮助我们达到这个目的。以下代码演示它们的用法&#xff1a;v…

生信入门-爱课程上的华中农业大学

1.生物大分子序列分析 2.主要技术 3.生物信息学的应用 4.应用2 转载于:https://www.cnblogs.com/BlueBlueSea/p/9610313.html

pc端文本_使用即将推出的Windows功能从PC发送文本

pc端文本Windows/Android/iPhone: Send and receive SMS messages on your PC, and access all the files on your phone without taking it out of your pocket. Windows / Android / iPhone&#xff1a;在PC上发送和接收SMS消息&#xff0c;并访问手机上的所有文件&#xff0…

日常工作用到的正则

1、手机号码加*"13422222222".replace(/(\d{3})\d{4}(\d{4})/, $1****$2);2、隐藏银行卡号"1111111111111111111".replace(/^(\d{4})\d(\d{4})$/, **** **** **** $2); 1111111111111111.replace(/.(?.)/g, *);3、遇见大写字母改为"_"component…

非常详细的Exchange 功能路线图

非常详细的Exchange 功能路线图 此路线图可帮助您熟悉 Microsoft Exchange Server 2010 中的所有功能。第一部分列出了可通过 Exchange 管理控制台 (EMC) 或 Exchange 命令行管理程序管理的所有功能。该部分还说明如何在 EMC 中导航至功能&#xff0c;并提供指向相应管理主题的…

String类常用方法

定义方法类型描述public String(char[] value)构造直接将一个字符数组变为一个字符串public String(char[] value,int offset,int count)构造将一个指定范围的字符数组变为字符串public String(byte[] bytes)构造将一个byte数组全部变为字符串public String(byte[],bytes,int o…

python基础一 day6 文件操作

读写只会进行两步&#xff0c; r模式下写读 seek是按字节去找的 for line in f: for循环是一行一行的读取出来 strip默认去空格和换行符 空格、制表符、换行符、回车、换页垂直制表符和换行符称为 “空白字符” for in 一个不可变数据类型&#xff0c;比如字符串&#xff0c;先…

静态路由默认路由的配置

静态路由实验 负载均衡的一点是个人理解&#xff0c;有不正确之处欢迎批评指正。 R1配置: s0/0/0口&#xff1a;193.1.1.9/30(本地) next-hop 193.1.1.10/30 point-to-point link F0/0设置子接口&#xff1a;F0/0.1 172.17.115.1/24 VLAN1 F0/0.5 172.17.110…

r中汇率市场_如何在Word 2013表中汇总行和列

r中汇率市场If you’re working in Word and you need to total values in a table, you can do so without having to enter the data into Excel and then copy and paste it into Word. Word can do simple calculations such as summing, multiplying, and averaging. 如果…

solidity事件详解

很多同学对Solidity 中的Event有疑问&#xff0c;这篇文章就来详细的看看Solidity 中Event到底有什么用&#xff1f; 写在前面 Solidity 是以太坊智能合约编程语言&#xff0c;阅读本文前&#xff0c;你应该对以太坊、智能合约有所了解&#xff0c;如果你还不了解&#xff0c;建…

敏捷开发

敏捷开发是1990年逐渐引起人们广泛关注的新型软件开发方式,它是具有应对快速变化需求的软件开发能力。相对于非敏捷开发&#xff0c;它是一种以客户需求为核心&#xff0c;持续迭代&#xff0c;循序渐进的开发方式&#xff0c;敏捷绝非是一种特定的开发方式&#xff0c;而是一种…

MpAndroidChart源码修改之饼状图添加标志线

由于项目需要,需要改MpandroidChart源码,下面,先看下效果图:效果图效果很简单,但是由于所选依赖库没提供相关方法,所以就需要重写源码了.这条红色的标志线其实就是那个影厅的均值嘛,这条线看着是不是和图表中的连接线很像呢,那把连接线稍加改造不就可以了吗?下面,先看下此依赖…

数据同步云端本地_如何从云端删除Windows 8的同步数据

数据同步云端本地The ability to sync data and settings between computers running Windows 8 is great, but it does mean that your information – possibly personal – is stored in the cloud. If you have changed your mind about syncing and want to remove your d…

前端roadmap

转载于:https://www.cnblogs.com/cleverle/p/9615061.html

mysql 8+ 忘记root密码 解决方案

在安装完数据库后&#xff0c;由于自己不小心直接关闭了安装窗口&#xff0c;或者长时间没有使用root用户登录系统&#xff0c;导致忘记了root密码&#xff0c;这时就需要重置MySQL的root密码。当然&#xff0c;最简单方式自然是删除数据库的data目录&#xff0c;然后重新安装数…

安全领域应该关注的网站

http://www.freebuf.com/ https://www.seceye.cn/ https://zhuanlan.zhihu.com/c_118578260 https://www.easyaq.com/samesource/360.shtml http://bobao.360.cn/index/index https://www.sec-wiki.com/event

国内是否可以安装alexa_Alexa可以听到您无法听到的命令,哪些黑客可以利用

国内是否可以安装alexaYour smart speaker can hear sounds that humans can’t, meaning attackers could hypothetically trigger a command without you noticing. It’s happening in labs right now. 您的智能扬声器可以听到人类听不到的声音&#xff0c;这意味着攻击者可…

为什么要使用React Hooks?(5分钟实例)

前言 React Hooks在React v16.8正式稳定版中加入。 Hooks是什么? React Hooks 就是让你不必写class组件就可以用state和其他的React特性&#xff1b;你也可以编写自己的hooks在不同的组件之间复用&#xff1b;最近很多人都在谈论 React Hooks。当使用React类组件那么久&#x…

ActiveMQ在windows下启动失败解决方案

activemq.xml文件中的<transportConnectors><!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB --><transportConnector name"openwire" uri"tcp://0.0.0.0:61616?maximumConnections1000&amp;wireForma…

jest忽略如何添加忽略_大多数人忽略的基本家庭维护任务

jest忽略如何添加忽略Owning a home requires a lot of responsibility, most notably regular maintenance to keep everything working great. However, there are a handful of very basic home maintenance tasks that you might be forgetting about. 拥有房屋需要承担很多…