Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VIM缩写中的光标位置_Vim - Fatal编程技术网

VIM缩写中的光标位置

VIM缩写中的光标位置,vim,Vim,有没有办法告诉VIM在缩略语扩展后将光标放在某个位置? 假设您在.gvimrc中有类似的内容 iabberv <? <?=|?> iabberv 您希望将光标放置在自动显示管道字符的位置。在本例中,我使用的快速解决方案是在缩写处插入一些按键: iabbrev <? <?=?><Left><Left> 它的作用与第一个例子相同。如果用空格展开缩写,它将有一个额外的空格。您可以通过在缩写中使用(退格)来删除它。或者用展开,这样就不会

有没有办法告诉VIM在缩略语扩展后将光标放在某个位置? 假设您在.gvimrc中有类似的内容

iabberv <? <?=|?> 
iabberv

您希望将光标放置在自动显示管道字符的位置。

在本例中,我使用的快速解决方案是在缩写处插入一些按键:

iabbrev <? <?=?><Left><Left>
它的作用与第一个例子相同。如果用空格展开缩写,它将有一个额外的空格。您可以通过在缩写中使用
(退格)来删除它。或者用
展开,这样就不会留下任何空间

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

这最好放在
.vimrc
中。现在,以下缩写将完全按照预期使用:

:iabbrev <silent> <? <?=?><Left><Left><C-R>=Eatchar('\s')<CR>
:iabbrev=Eatchar('\s')
它有点混乱,但有一个外部函数调用,可以删除空白,应该可以正常工作。

可以通过以下方法完成:

”
“在{rtp}/ftpluvin/vim/vim_snippets.vim中
inoreab如果
\=InsertSeq('if','if!cursorhere!\nendif!mark!')

其他插件也提供类似的功能。

您需要的是代码片段。我使用snipmate来实现这一点。

我尝试了iabbrev hha,但它删除了“=”字符:)我应该放在哪里?这正是我想要的,除了这个问题。非常抱歉在回答之前没有测试
功能。我在一个合适的解决方案中进行了编辑。很酷,它可以工作,接受这个答案:)我是这样使用的:
iabbrev hha=Eatchar('\s')
你应该看看,它太棒了!
func Eatchar(pat)
   let c = nr2char(getchar(0))       
   return (c =~ a:pat) ? '' : c      
endfunc
:iabbrev <silent> <? <?=?><Left><Left><C-R>=Eatchar('\s')<CR>
"
" in {rtp}/ftpluvin/vim/vim_snippets.vim
inoreab  <buffer> <silent> if    
      \ <C-R>=InsertSeq('if', 'if!cursorhere!\nendif!mark!')<CR>