我花的方式太多时间摸索周围因为Vim不处理花括号最喜欢的IDE做.这就是我想要发生的事情:
输入:
if( whatever )
{ <CR>
Run Code Online (Sandbox Code Playgroud)
得到这个:
if( whatever )
{
|
}
Run Code Online (Sandbox Code Playgroud)
其中<CR>意思是ENTER按键,|是光标的位置.这就是Eclipse的功能.这就是Visual Studio的功能.这就是我想让Vim做的事情.
我见过几个插件,试过几个,但似乎没有一个插件给我这种行为.当然,我不能成为第一个想要这个的程序员.
Mic*_*kis 33
在VimL中,您可以根据{需要将其映射到:
inoremap { {<CR>}<Esc>ko
Run Code Online (Sandbox Code Playgroud)
根据您的自动缩进设置,您可能希望将添加<BS>后<CR>.
对于更完整的解决方案,我建议你看看Luc Hermitte的vim插件.到目前为止,他们从未让我失望过.
Nik*_*dze 25
不需要插件。更干净、更灵活的解决方案:
inoremap { {}<Esc>ha
inoremap ( ()<Esc>ha
inoremap [ []<Esc>ha
inoremap " ""<Esc>ha
inoremap ' ''<Esc>ha
inoremap ` ``<Esc>ha
Run Code Online (Sandbox Code Playgroud)
Der*_*har 16
要在新行上获得右括号并将光标放在两个括号之间的行上,请遵循标题为" 使括号和括号处理更容易 "的文章中第一条注释的建议.
使用AutoClose与以下工作正常.
inoremap {<CR> {<CR>}<C-o>O
Run Code Online (Sandbox Code Playgroud)
至少对我的系统来说这是真的(Mac OS X上的Unix终端).
这是我在 vimrc 中的内容:
let s:pairs={
\'<': '>',
\'{': '}',
\'[': ']',
\'(': ')',
\'«': '»',
\'„': '“',
\'“': '”',
\'‘': '’',
\}
call map(copy(s:pairs), 'extend(s:pairs, {v:val : v:key}, "keep")')
function! InsertPair(left, ...)
let rlist=reverse(map(split(a:left, '\zs'), 'get(s:pairs, v:val, v:val)'))
let opts=get(a:000, 0, {})
let start = get(opts, 'start', '')
let lmiddle = get(opts, 'lmiddle', '')
let rmiddle = get(opts, 'rmiddle', '')
let end = get(opts, 'end', '')
let prefix = get(opts, 'prefix', '')
let start.=prefix
let rmiddle.=prefix
let left=start.a:left.lmiddle
let right=rmiddle.join(rlist, '').end
let moves=repeat("\<Left>", len(split(right, '\zs')))
return left.right.moves
endfunction
noremap! <expr> ,f InsertPair('{')
noremap! <expr> ,h InsertPair('[')
noremap! <expr> ,s InsertPair('(')
noremap! <expr> ,u InsertPair('<')
Run Code Online (Sandbox Code Playgroud)
而且,对于某些文件类型:
inoremap {<CR> {<C-o>o}<C-o>O
Run Code Online (Sandbox Code Playgroud)
// 我知道 InsertPair 函数是微不足道的,但它节省了时间,因为有了它我可以用一个命令定义命令和普通模式映射,而不必写很多<Left>s。
大括号、方括号和括号的解决方案,中间有制表符。
" Automatically closing braces
inoremap {<CR> {<CR>}<Esc>ko<tab>
inoremap [<CR> [<CR>]<Esc>ko<tab>
inoremap (<CR> (<CR>)<Esc>ko<tab>
Run Code Online (Sandbox Code Playgroud)
结果:
function() {
|
}
Run Code Online (Sandbox Code Playgroud)
将以下内容放入您的 .vimrc 文件中:
inoremap { {}<ESC>ha
Run Code Online (Sandbox Code Playgroud)
每当您{在插入模式下按下时,{}就会生成并将光标放在右括号上,以便您可以立即开始在它们之间输入。通过将花括号按顺序放置而不是放在不同的行上,您可以}手动将制表符放在前面。这样你就不会在它前面有错误数量的标签。
也许有人可以弄清楚如何计算光标所在的选项卡数量,然后}在新行的前面生成等量的选项卡。
inoremap ( ()<ESC>i
inoremap " ""<ESC>i
inoremap ' ''<ESC>i
inoremap { {<Cr>}<Esc>O
Run Code Online (Sandbox Code Playgroud)
按照标题为“自动附加结束字符”的文章中的建议安装并使用 Vim 脚本AutoClose。