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

VIM for Windows:如何编辑到行尾但在下线字符之前,windows,vim,Windows,Vim,我想做什么: 例如,我的代码中有一行如下所示 something.something() 我想在其周围添加print(): print(something.something()) 我是如何做到的: 我输入vim:^c$print()P意思是: 将光标放在行的开头 换整条线, 键入print() 将整行内容粘贴回打印前) 问题: 不幸的是,c$部分也剪切了EOL字符。因此,后续的P操作只需将该行粘贴到print()的顶部即可。因此最终结果如下所示: something.something()

我想做什么:
例如,我的代码中有一行如下所示

something.something()
我想在其周围添加
print()

print(something.something())
我是如何做到的:
我输入vim:
^c$print()P
意思是:

  • 将光标放在行的开头
  • 换整条线,
  • 键入
    print()
  • 将整行内容粘贴回
    打印
  • 问题:
    不幸的是,
    c$
    部分也剪切了EOL字符。因此,后续的
    P
    操作只需将该行粘贴到
    print()
    的顶部即可。因此最终结果如下所示:

    something.something()
    print()
    
    我的想法:
    现在,解决方法是使用
    v
    模式首先高亮显示除下线字符外的整行,然后执行上述操作


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

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

    :s/something.something()/print(&)/g
    
    请注意,通过将something.something拖动到未命名寄存器(例如,将光标放在文本上并点击“yiw”,但拖动的内容将取决于当前设置的
    iskeyword
    ),并键入
    :s/r/…

    或者,正如克里斯蒂安·吉本斯(Christian Gibbons)在评论中指出的那样,如果你想替换整行,你可以简单地做:

    :s/.*/print(&)
    

    我认为您根本不想进入编辑模式。只需执行以下操作:

    :s/something.something()/print(&)/g
    
    请注意,通过将something.something拖动到未命名寄存器(例如,将光标放在文本上并点击“yiw”,但拖动的内容将取决于当前设置的
    iskeyword
    ),并键入
    :s/r/…

    或者,正如克里斯蒂安·吉本斯(Christian Gibbons)在评论中指出的那样,如果你想替换整行,你可以简单地做:

    :s/.*/print(&)
    
    试试
    ^cg\u print()p

    g
    移动意味着“到行的最后一个非空字符”,由于在Windows中,如果您拖动/删除,回车符似乎是行的一部分,因此建议在Windows上使用
    \u g
    而不是
    $

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

    onoremap g_ $
    onoremap $ g_
    
    试试
    ^cg\u print()p

    g
    移动意味着“到行的最后一个非空字符”,由于在Windows中,如果您拖动/删除,回车符似乎是行的一部分,因此建议在Windows上使用
    \u g
    而不是
    $

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

    onoremap g_ $
    onoremap $ g_
    

    当然,这是可以开箱即用的

    假设您对正在做的事情的描述是准确的,那么您正在做的事情不起作用的原因很可能是由于您的配置中的某些东西造成的,因为
    c$
    (或其更好的替代方法
    c
    )永远不会拉长EOL

    以下是使用问题中所述方法的演示:

    ^c$print()<Esc>P
    
    ^c$print()P
    
    我将使用的方法是:

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

    当然,这是开箱即用的

    假设您对正在做的事情的描述是准确的,那么您正在做的事情不起作用的原因很可能是由于您的配置中的某些东西造成的,因为
    c$
    (或其更好的替代方法
    c
    )永远不会拉长EOL

    以下是使用问题中所述方法的演示:

    ^c$print()<Esc>P
    
    ^c$print()P
    
    我将使用的方法是:

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

    我欢迎任何工作环境。不必基于
    更改结束
    vim surround是否有任何帮助?所以,正如我所担心的,除了插件之外,它在VIM中是不可行的。我无法重现您的问题。没有为我输入
    \r
    。您的文件格式是否为dos
    ?@l3via比vim for windows,我正在编辑一个python文件。我欢迎任何解决方法。不必基于
    更改结束
    vim surround是否有任何帮助?所以,正如我所担心的,除了插件之外,它在VIM中是不可行的。我无法重现您的问题。没有为我输入
    \r
    。您的文件格式是否为dos
    ?@l3via比vim for windows,我正在编辑一个python文件。我不确定这应该是一个全局正则表达式。而且,这可能有点难。OP提到从行首到行尾执行环绕,因此a可能是一个与整个当前行和环绕匹配的正则表达式。可能类似于
    :s/^.\+$/print(&)/
    ,我不确定这应该是一个全局正则表达式。而且,这可能有点难。OP提到从行首到行尾执行环绕,因此可能是一个与当前整行和环绕相匹配的正则表达式。可能类似于
    :s/^.\+$/print(&)/
    @romainl这确实非常令人尴尬,我卸载了gvim,删除了{u vimrc并重新安装了它,我不再有这个问题了。那么我们在这里讨论的是什么设置呢?感谢您的编辑,非常专业。您可能删除了
    \u vimrc
    中的某些内容。@romainl这确实非常令人尴尬,我卸载了gvim,删除了\u vimrc并重新安装了它,我不再有这个问题了。那么我们在这里讨论的是什么设置呢?感谢您的编辑,非常专业。您可以在
    \u vimrc
    中找到一些内容