程序员如何定制自己的Vim?

很多程序员都会使用Vim辅助编程工作,这个实用的小工具其实还有很多妙用,今天异步君就给大家分享Vim中的定制方法,希望能让大家在“无聊”的宅家生活变得充实一些。


定制自己的Vim


Vim用户界面是可扩展的,读者可以改变Vim的主题,修改某些界面元素的显示方式,并且增强状态栏中的信息显示。此外,gVim还有更多其他可定制选项。

配色

_Vim中可以使用多种配色,一部分是Vim自带的,一部分则由社区成员提供。读者可以通过在.vimrc中设置colorscheme来设置配色,如下所示。:colorscheme elflord
通过执行:colorscheme Ctrl + d命令,可以看到当前安装的配色列表(这里的Ctrl + d表示快捷键),如图所示。

程序员如何定制自己的Vim?

上面的例子中,使用的是:colorscheme PaperColor,它来自于GitHub仓库NLKNguyen/papercolor-theme。

读者可以进一步定制配色,修改其背景色,即将background选项设置为light或dark(必须在设置colorscheme之前完成)。

比如,下图为暗色调版本,即set background=dark配合PaperColor配色。

程序员如何定制自己的Vim?

浏览配色

网上有很多Vim配色,以迎合不同的用户需求。不过,目前并没有一个权威的配色资源。读者需要自行搜索,寻找适合自己审美的配色。

如果读者已经有很多配色方案,则可以使用插件ScrollColors来帮助自己从中找出最喜欢的样式。ScrollColors插件有一个:SCROLL命令,可以供用户交互式地浏览不同的配色。

如果使用vim-plug管理插件,则安装ScrollColors的方法为在.vimrc中添加Plug 'vim-scripts/ScrollColors'代码,然后运行:w | source $MYVIMRC | PlugInstall命令。

在GitHub仓库flazz/vim-colorschemes中也有大量的Vim配色,其中包括数百个受用户欢迎的配色,这应该是一个不错的资源。

vim-colorschemes插件和ScrollColors可以配合使用,方便用户浏览流行的配色方案。

vim-colorschemes可通过vim-plug安装,安装方法为在.vimrc中添加Plug 'flazz/vim-colorschemes'代码,然后运行:w | source $MYVIMRC | PlugInstall命令。

常见问题

有时候,读者会发现自己正在试用的配色并没有示例图片看起来那么漂亮,而且颜色数目好像也不够多。


最可能的原因是终端模拟器错误地告诉Vim它只支持8种颜色,而现代终端模拟器普遍支持256种颜色。为解决这个问题,读者需要正确地设置$TERM环境变量。

这种情况极有可能发生在Tmux和GNU Screen中,因为它们错误地汇报了颜色数目。

如果读者觉得256种颜色还不够用,某些终端还支持24位颜色,通常称为真彩色。如果读者的终端支持24位真彩色(网上搜索确认一下),可在~/.vimrc中添加set termguicolors。

为查看环境变量$TERM当前的值,可运行如下命令。

$ echo $TERM

如果使用Tmux,则在.tmux.conf中添加如下设置。

set****-g****default-terminal "xterm-256color"

如果使用GNU Screen,则在.screenrc中添加如下设置。

term****"xterm-256color"

如果上述方法还不奏效,则在.bashrc中添加如下设置。

TERM=xterm-256color

不过在.bashrc中修改$TERM绝不是什么好主意。读者可以自行研究擅自修改$TERM会有什么后果。


状态栏

_状态栏是屏幕底部用于显示信息的一个区域。通过下列简单的设置,可以使状态栏更加符合用户要求。" 总显示状态栏(默认情况下,有时会隐藏)
set laststatus=2

" 在状态栏中显示最后执行的命令
set showcmd

如果读者想深度定制状态栏,则可以使用插件。这里介绍两款插件(Powerline和Airline),其中Powerline是强大的“全家桶”,而Airline则更为轻量级。

Powerline

Powerline为Vim提供了增强版的状态栏,而且还有其他功能,比如扩展Shell命令提示符或Tmux状态栏。此插件的GitHub仓库为powerline/powerline,在Vim中安装成功之后,Vim的状态栏如图所示。

程序员如何定制自己的Vim?

可以看到,Powerline提供的状态栏中包含了大量的信息,包括当前模式、Git分支、当前文件状态、文件类型、编码,以及光标所在的位置。这个状态栏是可定制的,需要显示多少信息可由读者自行决定。

不过,这个插件的安装有些麻烦,因为它不仅仅是一个Vim插件。首先,需要通过pip安装Python包powerline-status。

$ python3 -m pip install powerline-status

如果系统中没有安装pip,请参见本章开头介绍的安装方法。

然后,还需要确保$HOME/.local/bin目录在系统PATH路径列表中,即在.bashrc中添加以下代码。

PATH=$HOME/.local/bin:$PATH

最后,将laststatus设置为2(确保状态栏不会隐藏),并在~/.vimrc中加载Powerline。

" 总显示状态栏(默认情况下,有时会隐藏)
set laststatus=2

" 加载Powerline
python3 from powerline.vim import setup as powerline_setup
python3 powerline_setup()
python3 del powerline_setup

重载Vim配置文件(:w | source $MYVIMRC),就可以看到屏幕底部的状态栏了,如图所示。

程序员如何定制自己的Vim?

Airline

如果读者不需要过多的功能,也不希望Python程序一直在后台运行,那么Airline是更好的选择。

Airline提供了一个同样漂亮,并且信息足够丰富的状态栏,如图7.5所示。

程序员如何定制自己的Vim?

Airline的GitHub仓库为vim-airline/vim-airline,它不需要任何依赖项。

可以使用vim-plug安装Airline,安装方法为在.vimrc中添加代码Plug 'vim-airline/vim-airline',然后运行:w | source $MYVIMRC | PlugInstall命令。


gVim相关的配置

_gVim是一个独立的应用程序,相比于开箱即用的标准版Vim,gVim提供了更多的可配置选项。事实上,除.vimrc之外,gVim还有一个专用的配置文件.gVimrc。配置gVim图形用户界面的主要选项是guioptions。这个选项是一个字符串,通过多个字母可分别表示不同的设置,包括如下几个选项。

● a和P表示将可视模式下的文本选择自动复制(yank)到系统剪贴板中(参见第2章中关于*和+寄存器的介绍)。

● c表示使用控制台对话框,而不是弹出窗口。

● e表示用图形用户界面组件来显示制表符。

● m表示显示一个菜单栏。

● T表示包含一个工具栏。

● r、l、b分别表示右侧(r)、左侧(l)和底部(b)滚动条总是显示。


如果读者希望显示一个菜单栏和一个工具栏,并且总是显示底部的滚动条,则可以在.vimrc中添加如下代码。" GUI设置,显示菜单栏和工具栏,总显示底部滚动条
set guioptions=mTb
设置生效之后,界面如图所示(这里是Windows系统中的gVim)。

程序员如何定制自己的Vim?

使用Vim的时间越长,就会发现配置文件的改动也越来越频繁。以至于.vimrc文件最后变成了也许用不到的别名、函数和插件,用户再也无法思考真正的需求。因此,定期查看.vimrc,并清理掉多余的函数、插件以及快捷键绑定是一件有必要的事。如果不清楚一个配置项的目的,最好将它删除。

优化工作流程

_每个人的工作流程都是独一无二的,没有两个人能同时走出一条完全相同的Vim轨迹。可以想办法填补读者的Vim使用风格的缺陷,并改善自己使用Vim的工作方式。读者有没有发现自己频繁重复使用同一个命令?定制一个快捷键是不是更好呢?比如,读者经常使用CtrlP插件(用于浏览文件树和缓冲区列表),那么可以使用如下快捷键绑定。nnoremap <leader>p :CtrlP
nnoremap <leader>t :CtrlPTag
再比如,读者经常对光标处的单词使用Ack命令(由ack-vim插件提供),那么可以在.vimrc中加入如下设置。nnoremap <leader>a :Ack!
其中,将光标处的单词插入命令行中,这个功能可以和:grep结合起来。
nnoremap <leader>g :grep */**
有些读者经常将分号当成引号(进入命令行模式时),那么只需要重新映射一下快捷键就可以解决这个问题。
nnoremap ; :
vnoremap ; :
总之,只要是重复执行的命令和操作,都可以通过定制一个快捷键来提高效率。

/<leader>/<leader>/<leader>/<leader>


整理.vimrc

如果经常使用和定制Vim,则.vimrc文件会很快变得庞大,这时令.vimrc更易于浏览就显得非常有必要。建议读者经常整理.vimrc。
注释是必要的,不然会忘记当初修改的原因。这和写代码是完全一样的,注释可消除日后不得不重新学习的烦恼。
比如,下面的配置文件中每一个配置项前面都有一个注释。

" 在状态栏中显示最后执行的命令
set showcmd

" 高亮显示光标所在的行
set cursorline

" 显示尺度信息 (在右下部位显示行、列和百分位)
set ruler

" 当终端足够宽时,显示行号


if &co > 80
set number
endif

" 单词的软换行
set linebreak

" 较长的文本行的漂亮显示
set display+=lastline

" 总是显示状态栏
set laststatus=2

有些读者习惯将注释和配置项写在同一行,比如下面的配置示例。

set showcmd " 在状态栏中显示最后执行的命令

set cursorline " 高亮显示光标所在的行

set ruler " 显示尺度信息 (在右下部位显示行、列和百分位)

if &co > 80 " 当终端足够宽时,显示行号
set number
endif

set linebreak " 单词的软换行

set display+=lastline " 较长的文本行的漂亮显示

set laststatus=2 " 总是显示状态栏

为每个插件写一个简短的注释是极其有用的,因为当不再需要某些插件时,修改也会非常容易。

Plug 'EinfachToll/DidYouMean' " 文件名建议
Plug 'Lokaltog/vim-easymotion' " 优化移动命令
Plug 'NLKNguyen/papercolor-theme' " 配色
Plug 'ajh17/Spacegray.vim' " 配色
Plug 'altercation/vim-colors-solarized' " 配色
Plug 'christoomey/vim-tmux-navigator' " 优化tmux整合
Plug 'ervandew/supertab' " 更强大的Tab
Plug 'junegunn/goyo.vim' " 集中编辑
Plug 'kien/ctrlp.vim' " 基于模糊搜索的Ctrl+p
Plug 'mileszs/ack.vim' " ack整合
Plug 'scrooloose/nerdtree' " 更美观的Netrw输出
Plug 'squarefrog/tomorrow-night.vim' " 配色
Plug 'tomtom/tcomment_vim' " 注释助手
Plug 'tpope/vim-abolish' " 方便处理单词大小写等情况
Plug 'tpope/vim-repeat' " 任意重复
Plug 'tpope/vim-surround' " 在命令行中快速移动
Plug 'tpope/vim-unimpaired' " 快捷键的配对使用
Plug 'tpope/vim-vinegar' " 用-打开Netrw
Plug 'vim-scripts/Gundo' " 可视化撤销树
Plug 'vim-scripts/vimwiki' " 个人维基百科

使配置文件方便浏览的方式有很多。一种推荐的方式是使用基于标记的折叠。比如,读者可以将配置文件分为4类:外观、编辑、移动和搜索,然后用手动折叠记号{{{1来标记折叠。

读者还可以使用一些ASCII艺术形式,比如用箭头(=>)和横线(---)使每个章节仿佛拥有一个大标题。

" => 编辑 --------------------------------------------------------- {{{1
syntax on



...

" => 外观 ----------------------------------------------------------- {{{1

set background=light
colorscheme PaperColor

通过这种方式,可以更方便地浏览.vimrc。如果想预览.vimrc,只需要用zM关闭所有折叠,如图所示。

定制自己的Vim,可以提高Vim易用性的方法。每个人的需求是不同的,赶紧照着上面的方法,定制属于自己的风格吧。


今日互动话题:

“延迟复工期间,你学了什么新技能?”



分享到:


相關文章: