双vim环绕*

时间:2015-09-24 19:32:47

标签: vim

假设我的光标在单词word内。使用vim-surround,输入序列ysiw*会将word替换为*word*

问题:我可以输入单个序列来代替生成**word**(即字粗体的常用降价方法)吗?这反对两次输入ysiw*,这感觉很麻烦。

5 个答案:

答案 0 :(得分:8)

@Dan Lowe关于使用repeat.vim.的回答是现货。但是,您也可以创建自定义环境,以便更快地执行常见操作。

将以下内容添加到~/.vim/after/ftplugin/markdown.vim文件中:

let b:surround_{char2nr('b')} = "**\r**"

现在,您可以ysiwb围绕双*个(b为粗体)。

有关自定义环境的更多帮助,请参阅:h surround-customizing

答案 1 :(得分:4)

安装Laravel's source插件,然后您可以使用.(重复运算符)执行此操作。

你可能需要在这里使用ysiw*l.,因为(至少,当我测试时)surround.vim将光标留在第一个周围的角色上,所以你必须回到单词中进行重复最后一个环绕声。否则,您最终会得到***word*

更新:有趣的是,在阅读了Peter Rincker提到这个答案的答案之后,我发现他建议的是我自己的Vim设置。但是我没有将它放在一个后续文件中,我的文件直接在.vimrc中,就像这样:

autocmd FileType markdown,octopress let b:surround_{char2nr('i')} = "*\r*"
autocmd FileType markdown,octopress let b:surround_{char2nr('b')} = "**\r**"

答案 2 :(得分:1)

如果你想进行任意操作并重复它们,最好的方法是使用vim宏。

例如,要重复问题中的操作,假设它一般是可重复的,可以执行以下操作将宏记录在寄存器q中。

qqysiw*q

然后使用以下内容重播第二个实例。

@q

或者,如果你想让一个宏做双重环绕,一种可能的方法就是在一个宏中记录两次序列。

 qqysiw*ysiw*q

答案 3 :(得分:0)

使用lh-brackets,在降价文档中,您可以在正常模式下在当前单词上键入_两次 - 这会在渲染时产生相同的降价结果。你也可以输入\*两次,但这有点麻烦。

答案 4 :(得分:0)

作为一种稍微不同的方法,我们可以定义新命令:

1)可视区域加粗命令,例如:

:vmap \q di****<ESC>hP

(删除视觉区域,插入&#34; ****&#34;,将其放回中间)。像ve\q一样使用它。

2)insert-mode命令用于加粗最后写的字:

:imap \q <ESC>diwi****<ESC>hPlla

3)光标下的正常模式加粗词:

:map \q diwi****<ESC>hP