常用配置函数
Vim 有一些配置函数,利用这些函数,我们可以通过修改配置文件让我们的 Vim 发挥出更强大的功能。
line(expr)
The result is a Number , which is the line number of the file position given with expr .
The accepted positions are: “.” the cursor position; “$” the last line in the current buffer; x position of mark “x” (if the mark is not set, 0 is returned).
返回值是一个整数。这个函数功能时返回一个行号。如果你后面的参数 expr 是 “.” 的话,则返回当前光标所在的位置。如果 expr 是 “$” 则返回当前缓冲区最后一行的行号。如果 expr 的值是一个标签名,则返回你对应的标签所在的行号。
例如:call line(“.”) 得到当前光标所在的行号。
col({expr})
返回指定位置的列号,列号从1开始算起。
例如:echo col(“.”) 返回光标所在的列号。echo col(“$”) 返回光标所在的行的长度+1。echo col([2,’$’]) 返回第2行的长度+1。(之所以是长度+1是因为,其实每行的最后有一个不可打印的换行符)
setpos({expr})
移动光标到指定的行和列。
例如:let pos=[0, 25, 15, 0]; call setpos(“.”, pos) 移动光标到 25 行 15 列的位置。
setline ({lnum}, {text})
Set line {lnum} of the current buffer to {text}.If this succeeds, 0 is returned. If this fails (most likely lnum is invalid) 1 is returned.
When {lnum} is just below the last line the {text} will be added as a new line.
这个函数就是将第 lnum 行的内容替换成 text 中的内容。如果这个 lunm 行是最后一行的下面一行,那么将新建一行,然后将 text 的内容存放到这一行。如果不是最后一行的下一行,则要满足的条件是行号为 lnum 的行必须是存在的。
例如:call setline(1, “/*********************/“) 在文件的开头添加上面的一行,主要是用于 .c/.cpp 文件注释的。
getline({lnum}, {end})
Without the {end},the result is a String, which is line {lnum} from the current buffer.
When {end} is given the result is a List where each item is a line from the current buffer in the range {lnum} to {end}, including line {end}.
返回值是一个字符串。当 end 参数存在的时候,函数返回行号为 lnum 的内容,否则函数将返回行 lnum 到行 end 的所有内容(包括第 end 行)。
例如:let lines=getline(2, 5); call append(6, lines) 取得 2-5 行的内容,然后从第六行的下一行开始添加,保持原来的格式不变。
append(lnum, string)
Append the text string after line lnum in the current buffer. lnum can be zero, to insert a line before the first one. Returns 1 for failure (lnum out of range) or 0 for success.
这个函数就是将 string 这个字符串,插入到行号为 lnum 的下一行。成功则返回 0,否则返回 1 。
expand(expr [, flag])
Expand the file wildcards in expr . The result is a String .
When the result of expr starts with% , # or < , the expansion is done like for the cmdline- special variables with their associated modifiers. There cannot be a white space between the variables and the following modifier. When the current or alternate file name is not defined, % or # use an empty string. Using %:p in a buffer with no name results in the current directory, with a “/ ”added.
When {expr} starts with ‘%’, ‘#’ or ‘<’, the expansion is done like for the |cmdline-special| variables with their associated modifiers. Here is a short overview:
“%” current file name;
“#“ alternate file name;
“#n” alternate file name n.
Modifiers:
:p expand to full path;
:h head (last path component removed);
:t tail (last path component only);
:r root (one extension removed);
:e extension only.
函数的返回值是一个字符串。功能就是将参数 expr 这个通配符进行扩展。各个通配符的含义上面列出来了。
例如:call append(2, “File Name: “.expand(“%”)) 在文件的第三行写入这句话 “File Name: ${filename}”,这边%表示当前文件的名称,通过函数expand(”%”)将其还原成了文件名字符串。let sourcefilepath=expand(“%:p”) 获取到当前文件的完全路径(绝对路径)。
配置函数应用举例
在用 Vim 打开文件后,在命令模式下,输入命令
1 | :echo col(".") |
即返回光标所在的列号。
在「$HOME/.vimrc」文件中添加如下语句
1 | if has("autocmd") |
此设置即在文件打开时,如果文件上次编辑的位置存在(即不在 1 行和最大行数以外),自动跳转至上次编辑的位置。
此外,可以使用
1 | au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! '\"" | endif |
跳转至上次离开的行首。或使用
1 | au BufReadPost * if line("'\"") > 0 && line("'\"") <= line("$") | exe "normal! `\"" | endif |
跳转至上次离开的位置。
Vim 配置收录
以下:
配置 | 功能 |
---|---|
set hlsearch | 搜索时高亮反白匹配字符串 |
set autoindent | 自动缩排 |
set ruler | 底边显示状态栏 |
set showmode | 左下角显示模式状态 |
set nu | 行首显示行号 |
set bg=dark | 设置底色色调 |
syntax on | 开启语法检查 |
set nocompatible | 不使用兼容模式 |
set textwidth=0 或 set tw=0 | 设置行宽,为 0 时即不自动换行 |
set backup | 开启自动备份 |
set bdir=~/.vim | 设置备份目录 |
set history=50 | 设置命令历史长度 |
set tabstop=4 或 set ts=4 | 设置制表符 tab 长度 |
set shiftwidth=2 或 set sw=2 | 设置自动缩进空格数 |
set showcmd | 显示命令 |
set showmatch | 显示匹配 |
set ignorecase | 忽略大小写 |
set incsearch | 输入搜索命令时显示当前匹配 |
set autowrite | 执行外部命令时自动保存 |
set nolist | 不显示不可见字符 |
set mouse=a | 鼠标可用 |
set nowrap | 不自动折行 |
set expandtab | 采用空格代替制表符 tab 缩进 |
set cursorline | 高亮当前行 |
set cursorcolumn | 高亮当前列 |
set relativenumber | 显示相对行号 |
set colorcolumn=80 | 设置高亮某列 |
highlight ColorColumn ctermfg=9 ctermbg=242 | 设置列高亮背景色 |
imap tt <esc> | 用 tt 连续按键代替 ESC 键 |
set encoding=utf-8 fileencodings=ucs-bom,utf-8,cp936,gb2312 | 解决部分字符乱码问题 |
注:本表持续更新中
将以上配置写入「$HOME/.vimrc」文件,即可对所有文件打开生效。
如果想要对某些文件采用不同的打开初始配置,可在相应的文件末尾加入类似如下语句
1 | # vim:ft=make:sw=4:wrap |
该文件为一个 makefile 文件,第一个字符 “#” 为 makefile 文件的注释符,不同的文件可以采用各自相应的注释符。”ft=make” 即指文件格式为 makefile 文件,Vim 自动按 makefile 语法高亮文本,”sw=4” 即设置自动缩进空格数为 4,”wrap” 即设置自动折行,在这里,省去配置语句中的 set,不同的配置语句间用 “:” 隔开。
Vim 命令技巧收录
以下:
命令 | 作用 |
---|---|
:se cuc | 垂直竖杠(即 set cursorcolum) |
:Sex | 浏览目录 |
:helpgrep ColorColumn | 查找与 ColorColumn 相关的帮助 |
:hi | 查看 highlight 的系统配色方案 |
注:本表持续更新中
vim-plug 管理插件
vim-plug 是一款轻量的 Vim 插件管理器,通过如下一条命令即可完成安装:
1 | curl -fLo ~/.vim/autoload/plug.vim --create-dirs \ |
之后再在 ~/.vimrc 文件中加入类似如下内容即可启用:
1 | call plug#begin('~/.vim/plugged') |
上例中直接加载了 SirVer/ultisnips 和 lervag/vimtex 插件,Plug 起始行可根据自己的需要加载不同的第三方插件。
保存上述修改之后,重新打开 Vim,在命令模式下执行 :PlugInstall
即可安装上述加载的插件,再次重启 Vim 正确加载插件后,根据自己的需要在 ~/.vimrc 中设置不同的环境变量以更改插件的默认设置。
若想卸载插件,先在 ~/.vimrc 中注释掉该插件所对应的 Plug 起始行,再重新打开 Vim,在命令模式下执行 :Plugclean
即可。
常用插件推荐配置
SirVer/ultisnips
SirVer/ultisnips 是一款代码片段模板自动补全插件。推荐配置如下:
1 | let g:UltiSnipsExpandTrigger = '<tab>' |
在 Vim 命令模式下执行 :h UltiSnips
即可查看该插件的帮助文档。
lervag/vimtex
lervag/vimtex 是一款对 LaTeX 文件(以 .tex 为文件名后缀)提供实时编译功能的插件。推荐配置如下:
1 | let g:vimtex_compiler_method = 'latexmk' |
在 Vim 命令模式下执行 :h vimtex
即可查看该插件的帮助文档。
airblade/vim-gitgutter
airblade/vim-gitgutter 是一款在编辑文件时实时显示 git 差异(与 git diff 结果类似)的插件。推荐配置如下:
1 | set updatetime=100 |
在 Vim 命令模式下执行 :h gitgutter
即可查看该插件的帮助文档。
jiangmiao/auto-pairs
jiangmiao/auto-pairs 是一款在插入左括号时自动补全右括号的插件。推荐配置如下:
1 | let g:AutoPairsFlyMode = 1 |
该插件的帮助文档见 README.md。
ycm-core/YouCompleteMe
ycm-core/YouCompleteMe 是一款强大的基于语义分析的代码补全插件。先以命令 [user@A ~] sudo apt install build-essential cmake vim-nox python3-dev
安装依赖,再正常安装插件,最后在 Vim 命令模式下执行 :YcmRestartServer
启动语义分析补全服务,即可正常使用。推荐配置如下:
1 | set completeopt=longest,menu |
在 Vim 命令模式下执行 :h youcompleteme
即可查看该插件的帮助文档。