我到处找了找,没有找到一个插件可以像Textmate一样简单地自动关闭一组括号。例如:
Vim : (*manually close parens* → ) Textmate: (*Auto closes parens*)
如果你能描述一个插件,我将是非常有帮助的。谢谢!
ymzxtsji1#
对于我们这些想走普通vim路的人来说:
vim
ino " ""<left> ino ' ''<left> ino ( ()<left> ino [ []<left> ino { {}<left> ino {<CR> {<CR>}<ESC>O
这是在insert模式下自动完成的。保留在vimrc中以避免每次都输入它,当我们不需要Map时,我们需要在输入( {等的Map字符之前使用ctrl-v来转义它。
insert
vimrc
( {
qvk1mo1f2#
我使用AutoPairs。您可以在此处获得:https://github.com/jiangmiao/auto-pairs.git如果你读了文档,它有很多选项,涵盖了大多数可能性。
ttcibm8c3#
尝试分隔配对:https://github.com/Raimondi/delimitMate这里也列出了一些插件..加上自己设置的说明:http://vim.wikia.com/wiki/Automatically_append_closing_characters
okxuctiv4#
我正在维护一个插件,简化插入平衡括号一样的字符,甚至支持周围的话/行/选择。https://github.com/LucHermitte/lh-brackets/#the-bracketing-subsystemlh-cpp页中介绍了C & C++的默认绑定。
aiqt4smr5#
在没有插件的情况下,完全在Vim中完成,并模拟所有存在的IDE。
" # Close brackets automatically, with return inoremap {<cr> {<cr>}<C-O><S-O> inoremap (<cr> (<cr>)<c-o><s-o> inoremap [<cr> [<cr>]<c-o><s-o> " # Close brackets without return inoremap ( ()<left> inoremap { {}<left> inoremap [ []<left> " # Two cases below are covered by inoremap <exp> " inoremap " ""<left> " inoremap ' ''<left> " # If you close a bracket that is already closed, it overwrites inoremap <expr> ) strpart(getline('.'), col('.')-1, 1) == ")" ? "\<Right>" : ")" inoremap <expr> } strpart(getline('.'), col('.')-1, 1) == "}" ? "\<Right>" : "}" inoremap <expr> ] strpart(getline('.'), col('.')-1, 1) == "]" ? "\<Right>" : "]" inoremap <expr> ' strpart(getline('.'), col('.')-1, 1) == "'" ? "\<Right>" : "''<left>" inoremap <expr> " strpart(getline('.'), col('.')-1, 1) == "\"" ? "\<Right>" : "\"\"<left>" " # enclose a word in normal mode with "'({[ nnoremap ' mmbi'<esc>ea'<esc>`m<right> nnoremap " mmbi"<esc>ea"<esc>`m<right> nnoremap ( mmbi(<esc>ea)<esc>`m<right> nnoremap { mmbi{<esc>ea}<esc>`m<right> nnoremap [ mmbi[<esc>ea]<esc>`m<right> " # enclose a selection in visual mode with "'({[ vnoremap ' <Esc>`<i'<Esc>`>a<right>'<Esc> vnoremap " <Esc>`<i"<Esc>`>a<right>"<Esc> vnoremap ( <Esc>`<i(<Esc>`>a<right>)<Esc> vnoremap { <Esc>`<i{<Esc>`>a<right>}<Esc> vnoremap [ <Esc>`<i[<Esc>`>a<right>]<Esc>
5条答案
按热度按时间ymzxtsji1#
对于我们这些想走普通
vim
路的人来说:这是在
insert
模式下自动完成的。保留在vimrc
中以避免每次都输入它,当我们不需要Map时,我们需要在输入( {
等的Map字符之前使用ctrl-v来转义它。qvk1mo1f2#
我使用AutoPairs。您可以在此处获得:
https://github.com/jiangmiao/auto-pairs.git
如果你读了文档,它有很多选项,涵盖了大多数可能性。
ttcibm8c3#
尝试分隔配对:
https://github.com/Raimondi/delimitMate
这里也列出了一些插件..加上自己设置的说明:
http://vim.wikia.com/wiki/Automatically_append_closing_characters
okxuctiv4#
我正在维护一个插件,简化插入平衡括号一样的字符,甚至支持周围的话/行/选择。
https://github.com/LucHermitte/lh-brackets/#the-bracketing-subsystem
lh-cpp页中介绍了C & C++的默认绑定。
aiqt4smr5#
在没有插件的情况下,完全在Vim中完成,并模拟所有存在的IDE。