VIM for Windows:如何编辑到行尾但在EOL字符之前

时间:2018-08-02 15:00:12

标签: windows vim

我要做什么:
例如,我的代码中有一行看起来像这样

something.something()

我想在其周围添加print()

print(something.something())

我的操作方式:
我输入vim:^c$print()<Esc>P的意思:

  1. 将光标置于行首
  2. 更改整行,
  3. 输入print()
  4. 将整行粘贴回print的{​​{1}}之前。

问题:
不幸的是)部分也切断了EOL字符。因此后续的c$操作将只将行粘贴到P的顶部。因此最终结果将如下所示:

print()

我的想法
现在,解决方法是使用something.something() print() 模式突出显示除EOL字符外的整个行,然后执行上面的操作。

我正在寻找类似于v ct$的东西,但是它们都不起作用。我的行并不总是以ci$结尾,可能是()或仅仅是纯文本,所以__dict__很方便,但我正在寻找更通用的东西。谢谢。

3 个答案:

答案 0 :(得分:2)

当然是开箱即用的。

假设您对自己所做的事情的描述是准确的,那么您所做的事情不起作用的原因很可能是由于您的配置中的某些原因造成的,因为c$(或更优)替代方法C)永远不要拖延EOL。

这是问题所描述的使用您的方法的演示:

^c$print()<Esc>P

以及我将使用的方法:

^Cprint(<C-r>")<Esc>

works

答案 1 :(得分:1)

我不认为您根本不想进入编辑模式。只要做:

:s/something.something()/print(&)/g

请注意,您可以通过轻松地交互操作来执行此操作(例如,不必将“ something.something”输入未命名的寄存器中(例如,将光标放在文本上并点击'yiw',但是要取消的内容取决于当前的iskeyword)设置,然后键入:s/<ctrl>r"/...

或者,正如克里斯汀·吉本斯(Christian Gibbons)在评论中指出的那样,如果您想替换整行,则只需执行以下操作即可:

:s/.*/print(&)

答案 2 :(得分:1)

尝试^cg_print()<Esc>P

g_的移动意思是“到该行的最后一个非空白字符”,并且由于在Windows中使用_g来拉/删除,回车似乎是该行的一部分。建议不要在Windows上使用$

如果您发现自己几乎不需要$,则可以交换.vimrc中的两个命令:

onoremap g_ $
onoremap $ g_