我创建了以下映射来模拟某些IDE中的行为,其中当您在{
之类的函数声明之后插入foo()
时,关闭}
并自动插入空行并且光标为设置为标签位置的空行。
:imap { {<CR><CR>} <up><Tab>
当我在任何上下文中插入{
时,这当然会出现这种情况。如何根据之前插入的字符进行操作?必须涉及vim脚本功能吗?
注意:我不想使用外部vim插件。
答案 0 :(得分:1)
IDE通常在输入{&lt; CR&gt;后进行此扩展,这在vimscript中很容易做到:
:imap {<CR> {<CR><CR>} <up><Tab>
如果您继续在同一行输入其他内容,则不会扩展。
需要注意的是,在使用此映射键入{时,会有一点延迟。有关详细信息,请参阅'timeout'和'timeoutlen'选项。
答案 1 :(得分:1)
这些代码片段在插入模式下为光标之前和之后提供字符:
let previous_character = getline(".")[col(".")-2]
let next_character = getline(".")[col(".")-1]
您可以在<expr>
映射中使用它们:
:inoremap <expr> { getline(".")[col(".")-2] == " " ? "{^M}^OO" : "{"
上面的无意义映射会在决定是否插入{
或展开的{}
之前检查光标前的字符是否为空格。
如果你想要一个聪明的&#34;映射您赢得了无法编写一个或多个功能。例如,我使用的是69行。
答案 2 :(得分:0)
您将在Automatically append closing characters Vim Tips Wiki页面上找到多种方法和插件列表。请注意,尽管存在简单的解决方案,但它们通常有一些缺点,并且不幸的是,整个方法在Vim 7.4中被解除了。