vim自定义指导(一)——自动补齐括号+tap跳出括号
问题描述
使vim写代码时,发现vim没有自动补齐括号和tap键跳出括号的功能,这种基础的功能各个IDE已经部署了,我不允许自己在使用vim时没有这个功能,幸vim有着高度自定义的特性。这里就来简单描述一下实现方案,方案来自博主 Ciruy B.Heimerdinger 以及 lazybios
解决方案
1. 自动补齐括号
- 找到vim的配置文件 vimrc 或者 .vimrc 。一般来说,系统配置文件在 /etc/vim/vimrc 。用户配置文件在 ~/.vimrc 。每个人的配置文件位置可能不一样,请自行查看。
# 打开配置文件
vim /etc/vim/vimrc
将下列代码输入到文件的尾部
" 设置括号自动补齐
inoremap ( ()<LEFT>
inoremap [ []<LEFT>
inoremap { {}<LEFT>
inoremap " ""<LEFT>
inoremap ' ''<LEFT>
inoremap < <><LEFT>
2. 删除左括号时同时删除右括号
同样的在配置文件的尾端加入如下代码
" 自动删除括号
function! RemovePairs()
let s:line = getline(".")
let s:previous_char = s:line[col(".")-1]
if index(["(","[","{"],s:previous_char) != -1
let l:original_pos = getpos(".")
execute "normal %"
let l:new_pos = getpos(".")
" only right (
if l:original_pos == l:new_pos
execute "normal! a\<BS>"
return
end
let l:line2 = getline(".")
if len(l:line2) == col(".")
execute "normal! v%xa"
else
execute "normal! v%xi"
end
else
execute "normal! a\<BS>"
end
endfunction
function! RemoveNextDoubleChar(char)
let l:line = getline(".")
let l:next_char = l:line[col(".")]
if a:char == l:next_char
execute "normal! l"
else
execute "normal! i" . a:char . ""
end
endfunction
inoremap <BS> <ESC>:call RemovePairs()<CR>a
inoremap ) <ESC>:call RemoveNextDoubleChar(')')<CR>a
inoremap ] <ESC>:call RemoveNextDoubleChar(']')<CR>a
inoremap } <ESC>:call RemoveNextDoubleChar('}')<CR>a
inoremap > <ESC>:call RemoveNextDoubleChar('>')<CR>a
3. 剪切板共通
在使用vim时,可能会出现系统剪切板和vim剪切板不互通的问题,这个时候请检查vim的clipboard模块是否安装, 输入vim --version | grep clipboard
若已经安装会显示
+clipboard
。此时只需要更改vim的配置文件就可以实现文件互通。在配置文件中输入set clipboard=unnamed
即可实现系统剪贴板和vim剪贴板互通若未安装会显示
-clipboard
。 此时需要重装vim。使用下面的命令进行vim重装sudo apt install vim-gtk
重装后回到检查 clipboard 的步骤,查看是否有+clipboard
出现。