debian

VIM 安装、设置和美化教程

波比AI · 5月1日 · 2025年本文共8055个字 · 预计阅读27分钟18次已读

开源工具均部署在Debian下,vim属常用工具,所以花时间,整理及做了相应配置
懒人版:GitHub – FLbobyaiHonker/vim-plus-plus: Frank的至尊vim配置,基于vim-plus改造,一键部署。

一、基本配置

1. 配置文件

vim的配置文件有两处,请根据实际情况选择修改哪个。

  • 全局配置文件( /etc/vim/vimrc )
    此文件的配置会对系统内所有用户有效,包括root用户。

  • 单用户配置文件( /home/xxx/.vimrc )
    此文件的配置只对用户xxx有效。这里xxx代表用户名,比如用户名是sun,则修改/home/sun/.vimrc。如果当前登录用户就是sun,也可以直接修改~/.vimrc,因为在linux系统中符号 ~ 等同于用户的家路径,按照此处例子即为/home/sun。

2. 基本配置

vimrc文件的注释要以双引号 ( ” ) 开头。

syntax on                     " 设置语法高亮                                                                                                                                                                              
set nu                        " 设置行数显示
set tabstop=4                 " 设置tab缩进长度为4空格
set autoindent                " 设置自动缩进,适用所有类型文件
set cindent                   " 针对C语言的自动缩进功能,在C语言的编程环境中,比autoindent更加精准
set list lcs=tab:\|\          " 设置tab提示符号为 "|",注意最后一个反斜杠后面要留有空格
set cc=0                      " 设置高亮的列,这里设置为0,代表关闭
set cursorline                " 突出显示当前行

基本配置后,效果如下图:
VIM 安装、设置和美化教程

二、插件管理器 vim-plug

vim可以安装插件来增加很多功能。这里推荐一个插件管理器vim-plug,用来安装各种插件,比自己在网上一个个找插件安装更加高效。项目的github地址:https://github.com/junegunn/vim-plug,上面有比较详细的介绍。

1. 下载

curl -fLo ~/.vim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

如果下载时出现网络问题,可以在 /etc/hosts 中添加下面语句后,重新执行下载命令。

199.232.28.133 raw.githubusercontent.com

2. 在vimrc中添加vim-plug配置

添加吓内容:

call plug#begin()                 " vim-plug开始(必须)
Plug '插件'                       " 这里写插件名称,例如 Plug 'scrooloose/nerdtree'
call plug#end()                   " vim-plug结束(必须)

注:
(1) 上面这段必须要写在vimrc文件的开头,否则安装插件会有问题
(2) vim-plug安装的插件默认都会放在 ~/.vim/plugged 中。开始语句的括号内可以指定安装路径,例如:call plug#begin(‘~/some/path/here’)。
(3) 需要添加的插件放到 call plug#begin() 和 call plug#end() 之间。

3. vim-plug 的使用

命令 描述
PlugInsall [插件名][线程数] 安装插件。如果不指定插件名,则安装.vimrc中所有记录的插件。
PlugUpdate [插件名] [线程数] 安装或更新插件
PlugClean 删除所有插件。ps:如果只是哪个插件不想用了,可以直接在.vimrc中把它注释掉即可
PlugUpgrade 升级 vim-plug
PlugStatus 检查插件状态
PlugDiff 显示更新前后插件的变化
PlugSnapshot [快照文件路径] 生成用于恢复插件的当前快照的脚本。生成的快照文件会包含插件当前的 git commit id, *恢复插件的方法**: 在vim中source快照文件或直接执行vim -S snapshot.vim

VIM 安装、设置和美化教程

  • 重新打开编辑器后
  • 在截图红框1中,输入想要安装的插件名
  • 在截图红框2处,输入命令:PluginInstall,即可安装

三、常用插件

1. NERDTree — 目录树

安装NERDTree后,vim就可以使用目录树(NERDTree)了。
VIM 安装、设置和美化教程

(1)NERDTree 基本配置

下面是我在~/.vimrc中的配置,请依据自己情况进行配置。

Plug 'scrooloose/nerdtree'   " 放在语句 call plug#begin() 和 call plug#end() 之间

" 下面几行是配置NERDTree插件的,正常也可以不用配置,看自己需求。
autocmd VimEnter * NERDTree    " 打开文件后自动打开NERDTree
map <F2> :NERDTreeMirror<CR>   " 按键F2:映射其他标签页
map <F3> :NERDTreeToggle<CR>   " 按键F3:展开/收缩NERDTree
map f :NERDTreeFind<CR>        " 按键f:在NERDTree窗口中,将光标跳转到当前打开的文件上。
map 1 :tabp<CR>                " 按键1:切换到前一个标签页
map 2 :tabn<CR>                " 按键2:切换到后一个标签页

[!note]解释
这里解释一下map :NERDTreeToggle<CR>语句:
map <F3>      代表F3按键
:NERDTreeToggle  代表末行模式下输入NERDTreeToggle
<CR>        代表换行

(2)安装

打开vim编辑器,在末行模式下输入命令PlugInstall后回车,等待安装完成即可。

(3)NERDTree常用快捷键

NERDTree的官方帮助文档默认位置:~/.vim/bundle/nerdtree/doc/NERDTree.txt

a. 文件打开,编辑窗口的切换 / 分割 / 关闭等:

VIM 安装、设置和美化教程

b. NERDTree窗口内部行为

VIM 安装、设置和美化教程

c. NERDTree常用命令

VIM 安装、设置和美化教程

d. 标签页

VIM 安装、设置和美化教程

e. 书签

VIM 安装、设置和美化教程

2. Tagbar — 代码结构

就是用来显示文件结构的插件,如下图
VIM 安装、设置和美化教程

(1)Tagbar基本配置

下面是我在~/.vimrc中的配置,请依据自己情况进行配置。

Plug 'majutsushi/tagbar'      " 放在语句 call plug#begin() 和 call plug#end() 之间

" tagbar
map <F4> :TagbarToggle<CR>      " 按键F4:Tagbar窗口的收缩/展开

(2)安装

打开vim编辑器,在末行模式下输入命令PlugInstall后回车,等待安装完成即可。

(3)快捷键

Tagbar的用法较为简单,所以快捷键就不过多讲解了。原生的快捷键我用着不是很方便,改了三个,如下图,改完后重启Vim生效。
VIM 安装、设置和美化教程

3. vim-airline — 状态栏美化

VIM 安装、设置和美化教程

(1)vim-airline基本配置

" 放在语句 call plug#begin() 和 call plug#end() 之间
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'

" vim-airline
let g:airline_theme='bubblegum'         " 配置主题。如果不配置,默认主题也挺不错的,如上面图所示。

(2)安装vim-airline

打开vim编辑器,在末行模式下输入命令PlugInstall后回车,等待安装完成即可。

(3)扩展主题安装

vim-airline中默认只有一个dark主题,可以去github上下载更多主题文件,然后放到~/.vim/plugged/vim-airline-themes/autoload/airline/themes中,这样我们就可以配置更多主题了。

主题文件地址:GitHub – vim-airline/vim-airline-themes: A collection of themes for vim-airline
VIM 安装、设置和美化教程

更换主题方法:
(1) 临时方法:Vim末行模式下,执行命令AirlineTheme <主题名称>(例如:AirlineTheme lucius)
(2) 永久方法:在.vimrc文件中添加语句let g:airline_theme=<主题名称>(例如:let g:airline_theme=lucius)
VIM 安装、设置和美化教程

4. FZF — 模糊搜索神器

FZF(Fuzzy Finder)是一款功能强大的模糊搜索神器,可以和很多例如git,find,vim,ag,ranger,ps等等一系列实用性工具结合。掌握FZF无疑是提高工作效率最重要的手段之一。本篇文章因为是讲Vim的,所以这里只讲解在Vim中的FZF使用。

(1)在~/.vimrc中的基本配置

FZF的作者为了方便大家使用,做了一个FZF的Vim插件 ( fzf.vim ),只需要简单配置一下就可以安装。

" 执行PlugInstall时克隆fzf源码到本地,并且会执行fzf中的install程序来安装fzf。
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }

" 执行PlugInstall时下载fzf.vim插件
Plug 'junegunn/fzf.vim'

[!note]
注:上面的install程序会从github上下载一些东西,如果你的网络访问github比较费劲,这里可以先不写逗号及后面的部分。等到PlugInstall完成后,再把这部分加上,然后修改~/.vim/plugged/fzf/install文件,将github地址修改为国内镜像地址。等到用fzf的时候会提示进行安装。
VIM 安装、设置和美化教程

(2)安装

  • 打开vim编辑器,在末行模式下输入命令PlugInstall后回车,等待安装完成即可。
    • 在vim中打开fzf,第一次会提示安装fzf程序,点击y回车后等待安装完成即可。这一步可以参考下面的gif动图,其中的Files命令是fzf中用来查找文件的,可以看到很迅速的就找到了framework中的Camera.java文件。

(3)FZF在vim中的常用命令

VIM 安装、设置和美化教程

5. NERDCommenter — 代码注释插件

类似IDE软件上的一键多行注释 / 取消注释的功能。
ps:下面的示例中,空格键就是leader键,我在.vimrc文件中,把leader键映射成空格了。

(1)基本配置

Plug 'scrooloose/nerdcommenter'      " 放在语句 call plug#begin() 和 call plug#end() 之间

(2)安装

打开vim编辑器,在末行模式下输入命令PlugInstall后回车,等待安装完成即可。

(3)常用快捷键

VIM 安装、设置和美化教程

6. vim-surround — 包裹符号

这个插件可以很方便的变更,添加,删除包裹语句的符号。这里的符号是广义的,除了是个单独的符号外,也可以是个字符串。
VIM 安装、设置和美化教程

(1)基本配置

Plug 'tpope/vim-surround'      " 放在语句 call plug#begin() 和 call plug#end() 之间

(2)安装

打开vim编辑器,在末行模式下输入命令PlugInstall后回车,等待安装完成即可。

(3)用法

vim-surround中有几个文本符号代表一些包裹符号,文本符号和包裹符号都可以使用,对应关系如下:
VIM 安装、设置和美化教程

a. 普通模式

注:下面表格原文本列的红色部分代表光标所在位置,原文本没有标注红色则代表当前情况下不受光标位置影响。

cs — 替换原有包裹符号
基本语法:cs<原符号><替换符号>
前提条件:光标需要在一对原符号之间或者在原符号上。
VIM 安装、设置和美化教程

ys和yss — 添加包裹符号

(1) ys为范围内的字符串添加包裹符号
基本语法:ys<指代范围的快捷键><要添加的符号>
指代范围的快捷键:如vim中常用的iw(单词),aw(单词及一个空格)等。

(2) yss为整行语句添加包裹符号
基本语法2:yss<要添laoxiongb2c加的符号>
VIM 安装、设置和美化教程

ds — 删除包裹符号
基本语法:ds<要删除的符号>
VIM 安装、设置和美化教程

自定义包裹符号
可以为某个符号自定义内容,需要在.vimrc中定义变量surround_<符号对应的ascii码值>,例如变量surround_45代表符号”-“,定义形式类似赋值操作,如下所示:

surround_<符号对应的ascii码值> = "开头的包裹符号\r结尾的包裹符号"

注:
(1) 一般情况下,\r代表被包裹的语句,其左侧为开头包裹符号,右侧为结尾的包裹符号。此外,也可以将两个\r放在一对\1等特殊变量中间,来做匹配并替换字符串操作,下面会较为详细介绍这个功能。
(2) vim的末行模式下,查询符号对应的ascii码:echo char2nr(“符号”)。查询ascii码对应的符号:echo nr2char(ascii码值)

(1) 普通用法:
首先,在.vimrc中定义变量surround_45(对应符号”-“)。

autocmd FileType php let b:surround_45 = "<?php \r ?>"

注:
(1) autocmd FileType php 这句规定了后面的变量只是在php文件中有效。
(2) \r左边部分就是开头的包裹符号,右边部分就是结尾的包裹符号。

VIM 安装、设置和美化教程

(2) 特殊变量\1…\6的用法:
这几个变量可以用来接收用户输入的内容,需要成对使用,例如\1\1,\2\2等。一对特殊变量代表一次输入,两对不同的特殊变量,则会要求输入两次,以此类推。

一对特殊变量的中间可以添加提示信息,如\1please input keyword:\1,在执行 yss<符号> 命令后,会在末行中显示这个提示信息,但是最后这个提示信息是不会添加到包裹符号中的,仅仅只是提示作用。
一对特殊变量的中间可以使用\r元字符\r替换字符进行匹配并替换字符串,如\1\rabc\rdef\1,在特殊变量接收到输入的字符串后,会执行字符串匹配替换操作。例如输入的字符串为”abc123″,则最后得出的字符串为”def123″。
一对特殊变量的前或后的字符串会被添加到包裹符号中,例如surround_108的定义体为 “begin \1please input keyword:\1 end” ,输入字符串为”testkey”,则最后得出的字符串bobyai为”begin testkey end”。

例一:.vimrc中定义如下surround变量。

" 符号l(小写L)
let g:surround_108 = "\\begin{\1please input keyword: \1}\r\\end{\1\1}"

VIM 安装、设置和美化教程

例二:.vimrc中定义如下surround变量。

" 符号p
let g:surround_112 = "\\begin{\1keyword1: \1, \2keyword2: \2}\r\\end{\3keyword3\3}"

VIM 安装、设置和美化教程

例三:.vimrc中定义如下surround变量。

" 符号t
let g:surround_116 = "\\begin{\1please input keyword: \1}\r\\end{\1\rabc\rdef\1}"

VIM 安装、设置和美化教程

例四:.vimrc中定义如下surround变量。

" 符号d
let g:surround_{char2nr("d")} = "<div\1id: \r..*\r id=\"&\"\1>\r</div>"

VIM 安装、设置和美化教程

再补充说明一下:

上面的图片中我做了说明,本例中匹配的字符串是一个或一个以上的非换行字符。正常也等价于 .+,但实际验证时发现此插件不识别这种正则表达式。
动图中做了三种演示情况:
第一次没有输入字符串直接回车,匹配失败,得到的包裹符号为

,符合预期;
第二次输入一个字符1,匹配成功,得到的包裹符号为

,符合预期;
第三次输入两个字符12,匹配成功,得到的包裹符号为

,符合预期。

b. 可视模式

下面表格原文本列的红色部分,代表可视模式下光标所选中的字符串。

(1) 添加包裹符号
VIM 安装、设置和美化教程

(2) 替换包裹符号
在可视模式下选择好要替换符号所在行后,然后按冒号进行批量处理命令 norm f<cs<“。

norm ( 也可写normal ) 也就是vim的普通模式;
f< 代表查找左尖括号并将光标跳转到找到的目标位置;
cs<“就是上面讲的包裹符号替换的命令,将尖括号替换为双引号。

c. 插入模式

下面表格原文本列的红色部分,代表光标所在位置。
VIM 安装、设置和美化教程
vim-surround的文档上,还有一种插入模式下的用法。在.vimrc中定义变量surround_insert_tail,插入包裹符号后,会在其后追加surround_insert_tail变量的内容,变量定义如下所示:

let g:surround_insert_tail = "<++>"

个人感觉插入模式下的使用还是有些麻烦,还容易按错。如果只是想在插入模式下快速的打出成对的括号等符号,并将光标自动切换到括号内,可以直接在 .vimrc 文件中做按键映射,如下:

inoremap ( ()<Left>
inoremap [ []<Left>
inoremap < <><Left>
inoremap } {}<Left>
inoremap { {}<Left><CR><CR><Up><Tab>
inoremap " ""<Left>
inoremap ' ''<Left>

7. Tabular — 符号对齐

(1)基本配置

Plug 'godlygeek/tabular'      " 放在语句 call plug#begin() 和 call plug#end() 之间

(2)安装

打开vim编辑器,在末行模式下输入命令PlugInstall后回车,等待安装完成即可。

(3)用法

a. 正常用法

Tabular的用法比较简单,首先选中需要对齐的行,然后末行模式下输入Tabularize /<符号>后回车即可。

b. 扩展用法

从上面的动图可以看到,Tabular默认会对齐符号右侧的文本,并且符号与两侧的文本间距为一个空格。那么下面来讲一下如何自定义对齐方式和间距。
对齐方式:可以使用选项 l (小写L),r,c 来规定对齐方式。l 代表左对齐,r 代表右对齐,c 代表中间对齐。注意这个对齐是以要对齐的符号为参照物的,看下面的例子就明白了。
VIM 安装、设置和美化教程

例1:
命令:Tabularize /=/r1
解释:r 就是右对齐,可以看到符号左边的部分相对 “=” 已经右对齐了,r 后边的1则代表对齐后符号两边追加的空格数为1。
VIM 安装、设置和美化教程

例2:
命令:Tabularize /=/l1
解释:l 就是左对齐,可以看到符号右边的部分相对 “=” 已经左对齐了,l 后边的1则代表对齐后符号两边追加的空格数为1。
VIM 安装、设置和美化教程

例3:
命令:Tabularize /=/r1c1l0
解释:这个命令是作者文档上给的例子,可以让符号两边的文本都相对符号做对齐操作。这个命令我建议记住就可以了,深究起来比较麻烦,有点摸不清作者的逻辑。
VIM 安装、设置和美化教程

8. vim-illuminate — 突出显示光标所在单词

(1)配置

Plug 'rrethy/vim-illuminate'      " 放在语句 call plug#begin() 和 call plug#end() 之间

(2)安装

打开vim编辑器,在末行模式下输入命令PlugInstall后回车,等待安装完成即可。

(3)用法

安装好插件后,用vim打开文件,就可以看到光标所在单词都会突出显示。突出显示方式有两种,如下所示:

a. 下划线突出显示(默认)

VIM 安装、设置和美化教程

b. 高亮突出显示

VIM 安装、设置和美化教程

想要达到这种效果,需要在~/.vimrc中添加下面语句。

hi illuminatedWord ctermfg=white ctermbg=161

[!note]
hi: 用于定义高亮组样式
illuminatedWord: 这个是vim-illuminate插件的关键字,高亮组名称
ctermfg: 终端前景颜色,使用ANSI颜色代号(0-255)或者常规颜色单词。
ctermbg: 终端背景颜色,使用ANSI颜色代号(0-255)或者常规颜色单词。
————————————————

可以使用下面代码输出256种ANSI颜色。

 #!/bin/bash                                                                                                                                                                                                 

count=0
for i in {0..255}; do
|   printf "\033[48;5;${i}m%7d\033[0m" ${i}
|   ((count++))
|   if [ $((count % 16)) -eq 0 ]; then
|   |   printf "\n"
|   fi
done

VIM 安装、设置和美化教程

参考

[Total: 0 Average: 0]
0 条回应

必须 注册 为本站用户, 登录 后才可以发表评论!