用于在vim中用空格包围字符的命令

时间:2010-03-14 19:03:19

标签: vim vi

我正在尝试正确使用vim - 为了帮助我,我将箭头键映射到“”,以便我被迫使用{hjlk}来移动。

当我想用空格包围一个字符时,这会引起我的问​​题,例如:

“2 + 3”格式更好“2 + 3”

以前我会将光标放在+并输入:

  

我[空间] [arrow-right] [空格] [Esc]

那是5次按下。

要在没有箭头的情况下执行此操作,我似乎需要将光标放在+上并转到:

  

I [空间] Esc键LLI [空格] Esc键

那是8次按下。

我可以将“li”转换为“a”,将其减少到7次按下:

  

I [空间] [Esc键] LA [空格] Esc键

如果没有将它写入宏中,有没有更好的方法呢?是否有一些神奇的vim命令允许我在少于5次按下的情况下执行此操作 - 以及某种方式来概括它以便我可以对整个单词或符号执行此操作,例如,如果我想将3 == 4转换为3 == 4?

9 个答案:

答案 0 :(得分:16)

就我个人而言,我认为摧毁你想要包围的东西,然后重新制作它是最有意义的。

c w "" ESC P

显然,你可以用你喜欢的任何东西替换对象和引号。要将一个字符+更改为[空格] + [空格],您可以

s [space] [space] ESC P
+

上的

答案 1 :(得分:5)

在阅读标题后首先想到的是surround.vim,这是一个很好的脚本,可以按照你所描述的方式做各种有用的事情。

要解决您的具体问题,我可能会将光标放在+和:

  

S [空间] + [空格] [ESC]

要将3 == 4更改为3 == 4,我可能会将光标放在第一个=上,并且:

  

I [空间] [ESC] WW。

答案 2 :(得分:3)

哈!我一直试图弄清楚如何在空间中包围一段时间,我终于找到了正确的组合。

使用surround.vim你说环绕选择器空间。

因此,对于这种特殊情况,我会使用视觉模式(对光标BTW下单个字符进行操作的好方法)因此:“vs”< - 四键按下!

我也习惯输入没有空格的参数列表之类的东西。使用这种技术,你可以使用w导航到第二个参数并说出“vws”来直观地选择一个单词并用空格环绕。

我通常更喜欢视觉选择模式。另外的环绕语法“ysw”排除了由“vw”捕获的单词最后一个逗号。

答案 3 :(得分:2)

我一直在想这个。我尝试使用surround.vim,但是天真的方法

S<space>

(在进行视觉选择之后)不起作用,因为空间已被作为修改器用于向其他周围字符对添加空间。 S<space><cr>在输出中添加^ M. Ss几乎可以工作,但之前只插入一个空格。

在github上询问tpope / surround.vim之后:

S<space><space>

在视觉模式下工作。或者,从正常模式,ysl<space><space>适用于单个字符

答案 4 :(得分:1)

尝试将光标放在“+”上并输入:

  

q1i [空格] [右箭头] [空格] [左箭头] [esc] q

这将在插槽1中录制一个快速宏,您可以随时重复使用该宏,它将用光标围绕光标下的字符。您可以使用@1重新调用它。

还有更通用的一个:

  

q1ea [space] [esc] bi [space] [右箭头] [esc] q

当您点击@1时,光标下的单词(“==”计为单词)将包含空格。

答案 5 :(得分:1)

您可以使用上述操作之一创建一个宏,并在每次需要时调用它(就像我写作时提出的amphetamachine)或者您可以简单地搜索&amp;替换:

:%s/\(\d\)\(+\|-\)\(\d\)/\1 \2 \3/g

您可能需要执行此命令两次,因为它只会发现每秒出现+/-。

编辑:

这将取代所有内容而无需被调用两次:

:%s/\d\@<=+\|-\d\@=/ \0 /g

答案 6 :(得分:1)

您可以设置这样的映射(按可视模式输入以包装空格):

:vnoremap <CR> <ESC>`<i<SPACE><ESC>`>la<SPACE><ESC>h

答案 7 :(得分:1)

此方法允许您使用。在下一个+。

重复命令

将光标放在+上并输入:

s[SPACE][CTRL-R]"[SPACE][ESC]

答案 8 :(得分:0)

我知道这是旧线程,但这可能对某人有用。我发现了地图(把它映射到你想要的任何其他东西!)

noremap <leader>ss diwi<SPACE><C-R>"<SPACE><ESC>B

适用于转动&#39; a + b&#39;进入&#39; a + b&#39; (当使用&#39; +&#39; char时)和转换&#39; a == b&#39;进入&= 39; a == b&#39; (当在第一个或第二个&#39; =&#39;符号上使用时)。

我希望它对某人有用。