当用Vim编写新功能时,我似乎总是需要做一些“手动”工作。
x =光标位置
如果我开始输入一个函数并插入几个大括号和结尾
function Apples() {x}
然后点击输入,显然看起来像这样
function Apples() {
x}
这导致我必须 ESC,O 才能将关闭的大卷曲向下移动。 虽然这看起来像是一件小事,但在过去的5个月里这样做很麻烦,我知道有很多像我这样的人知道应该有一个优雅的解决方案。我对插件建议持开放态度。
答案 0 :(得分:1)
你可以使用像这样的简单映射(在SO和网络上有很多变种):
inoremap {} {<CR>}<C-o>O
您还可以在www.vim.org搜索专用插件。
但我强烈建议您尝试使用Snipmate或UltiSnips之类的代码段扩展插件。这两个插件都遵循相同的模型,但它们的片段语法和功能略有不同。它的工作原理如下:
您输入了一个触发器:
fun
您点击<Tab>
并在选择模式下使用function_name
获得以下内容:
function [function_name]() {
}
您输入所需的名称:
function Apples|() {
}
您点击<Tab>
将光标放在括号之间:
function Apples(|) {
}
再次点击<Tab>
,将光标放在下面一行,并显示正确的缩进:
function Apples() {
|
}
答案 1 :(得分:0)
使用lh-bracket(在C或C ++模式下),当您在两个括号之间点击enter
时,会插入您期望的换行符。
我的想法是测试:getline(".")[col(".")-2:col(".")-1]=="{}"
并在条件为真时执行/插入"\<cr>\<esc>O"
,否则为"\<cr>"
。
在lh-bracket中,我有以下into a C-ftplugin:
call lh#brackets#enrich_imap('<cr>',
\ {'condition': 'getline(".")[col(".")-2:col(".")-1]=="{}"',
\ 'action': 'Cpp_Add2NewLinesBetweenBrackets()'},
\ 1,
\ '\<cr\>'
\ )
function! Cpp_Add2NewLinesBetweenBrackets()
return "\<cr>\<esc>O"
endfunction
我猜(代码未测试)它会(*)翻译成:
" put it into ftplugin/{yourfiltetype, javascript?}.vim
inoremap <buffer> <silent> <expr> <cr> s:SmartCR()
function s:SmartCR()
return getline(".")[col(".")-2:col(".")-1]=="{}"
\ ? "\<cr>\<esc>O"
\ : "\<cr>"
endfunction
(*)实际上,lh#brackets#enrich_imap
做了一些其他事情(映射与LaTeXSuite的IMAP.vim存在兼容;映射可以与lh-bracket的所有其他映射一起打开/关闭)< / p>