环绕在vim

时间:2013-02-14 01:14:30

标签: vim macvim

有没有一种简单的方法来包围文字,我知道这个plugin

但钥匙太多了。

我尝试了我的方法

vmap ' <D-x>i'<esc><D-v>i'
vmap " <D-x>i"<esc><D-v>i"

但这不起作用。无论如何,如果修复了这种方式,我怎么能将这种行为提取到一个允许我这样做的函数:

  1. 我选择任何文字(我认为这将是视觉模式)
  2. 我在“对称”环绕声的给定集合中输入任何符号(例如“,”,“,|,/,,* , - ),或”非对称“环绕声(用于示例&lt;&gt;,{},[],())
  3. 所选文字被符号包围。
  4. 如果选中的单词已经被包围并且切换符号,那么对于检测可能会很好。
  5. 有关如何执行此操作的任何建议阅读?

3 个答案:

答案 0 :(得分:6)

s's"是“太多关键”?真的?

Surround是 的方式。

您将无法使用映射(以及使用Cmd键的映射)。如果你想要一个切换引号的“智能”命令,你就不能真正跳过vimscript,从那里,最好只使用Surround这是最好的Vim插件之一。

无论如何,这可能是一个(快速且未经过彻底测试)的基础:

function! SurroundWithDoubleQuotes()
  let old_n = @n
  normal! gv
  normal! "nd
  let @n = "\"" . @n . "\""
  normal! "nP
  let @n = old_n
endfunction

您需要找到一种方法来输入所需的字符,并测试@n寄存器两端是否存在该字符。

:h functions如果您想要这样做,肯定会帮助您。

以下是我对映射的处理方法:

vnoremap " <Esc>`>a"<Esc>`<i"<Esc>

`> marks the end of the visual selection
`< marks its beginning

但要注意你的映射。在可视模式下,(){}[]具有想要超载的含义。

答案 1 :(得分:3)

如果你喜欢环绕声插件,但更喜欢更短的映射,你可以自己制作:

:vmap ' S'
:vmap " S"

(在这里,您必须使用:vmap而非首选:vnoremap,因为您希望应用插件的映射。或者,您可以直接映射到插件的<Plug>映射:{ {1}})

答案 2 :(得分:1)

这就是我要做的事情:

:vmap ' s''<esc>P
相关问题