如何创建打印字符或移动光标的功能

时间:2016-12-24 07:38:56

标签: vim vi

我试图通过对.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

我错过了什么?

2 个答案:

答案 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>映射应该可以正常工作。

相关问题