我试图通过对.vimrc
进行更改来学习vim / vimscript,因为我找到了我想要改进的东西。一个例子是我现在打印一个配对的关闭按钮,只要我打开一个打开,使用:
:inoremap ( ()<left>
这让我回到了parens的中心,给我留下了一个新问题。
我如何编写一个函数,在插入模式下键入)
字符时,如果光标当前在同一个字符上,则向右移动一个空格(不打印任何内容),但打印通常情况下呢?
我已尝试过以下内容,但听起来有些事我不明白,因为这只会打印文字字符串&#39;&lt; Esc&gt; la& #39; 在我想要向右移动空间的场景中。
:inoremap <expr> ) PrintParenIfNotOnParen()
:function PrintParenIfNotOnParen()
: if getline(".")[col(".")-1] == ')'
: return '<Esc>la'
: else
: return ')'
: endif
:endfunction
我错过了什么?
答案 0 :(得分:0)
解决方案实际上是在帮助中。输入:helpgrep Eatchar
即可获得:
可以在缩写后移动光标:
:iab if if ()<Left>
如果&#39; cpoptions&#39;这不起作用。包括&#39;&lt;&#39;旗。 &LT;&GT;
你甚至可以做更复杂的事情。例如,来消费 缩写后的空格:
func Eatchar(pat) let c = nr2char(getchar(0)) return (c =~ a:pat) ? '' : c endfunc iabbr <silent> if if ()<Left><C-R>=Eatchar('\s')<CR>
在您的情况下,您只需要更改最后一行:
function! Eatchar(pat)
let l:c = nr2char(getchar(0))
return (l:c =~ a:pat) ? '' : l:c
endfunction
iabbr <silent> ( ()<Left><C-R>=Eatchar('\s')<CR>
答案 1 :(得分:0)
返回')'
或'<right>'
。你现在没有比这更复杂的东西了。
缩写不是继续进行的方式。 Inoremapping是。 <expr>
映射应该可以正常工作。