有没有一种简单的方法来包围文字,我知道这个plugin
但钥匙太多了。
我尝试了我的方法
vmap ' <D-x>i'<esc><D-v>i'
vmap " <D-x>i"<esc><D-v>i"
但这不起作用。无论如何,如果修复了这种方式,我怎么能将这种行为提取到一个允许我这样做的函数:
有关如何执行此操作的任何建议阅读?
答案 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