VIM缩写中的光标位置

iva*_*n73 11 vim

是否有一些方法可以告诉VIM将缩放扩展后的光标放在某个位置?假设你在.gvimrc中有这样的东西

iabberv <? <?=|?> 
Run Code Online (Sandbox Code Playgroud)

并且您希望将光标放在管道字符自动的位置.

unp*_*680 10

我在这种情况下使用的快速解决方案是在缩写中插入一些按键:

iabbrev <? <?=?><Left><Left>
Run Code Online (Sandbox Code Playgroud)

将光标放在左边两个位置后=.

以这种方式,可以使用各种运动键,如<End>,<Home>或甚至返回到正常模式与<Esc>和通常的命令正常模式的命令.那么这个例子就是

iabbrev <? <?=?><Esc>hha
Run Code Online (Sandbox Code Playgroud)

它与第一个例子的作用相同.如果使用空格展开缩写,则会有一个额外的空格.你可以通过<BS>在缩写中使用(退格)来摆脱它.或者扩展,<C-]>不留空间.

更正:由于首先扩展缩写,然后插入空格,您需要在帮助(map.txt)中找到一个小函数:

func Eatchar(pat)
   let c = nr2char(getchar(0))       
   return (c =~ a:pat) ? '' : c      
endfunc
Run Code Online (Sandbox Code Playgroud)

这是最好的.vimrc.现在,以下缩写将完全按照预期的方式工作:

:iabbrev <silent> <? <?=?><Left><Left><C-R>=Eatchar('\s')<CR>
Run Code Online (Sandbox Code Playgroud)

它有点乱,但有一个外部函数调用,删除空白区域,它应该运行良好.


Dae*_*yth 5

你想要的是片段.我使用snipmate.