我正在尝试正确使用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?
答案 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;符号上使用时)。
我希望它对某人有用。