【问题标题】:Add spaces at cursor position在光标位置添加空格
【发布时间】:2011-07-28 13:39:40
【问题描述】:

我想知道是否可以在光标位置添加空格(30个空格)

我尝试使用正则表达式,但我不知道如何在正则表达式中表示实际光标位置。

【问题讨论】:

    标签: regex vim space text-cursor


    【解决方案1】:

    30iSPACE会在命令模式下的光标位置添加30个空格。

    【讨论】:

    • 它们实际上是在您退出插入模式时添加的(例如使用 ESC)
    • ...如果您经常这样做,您可以将:nmap <F2> 30i<Space><Esc> 添加到您的.vimrc 文件中,然后在正常模式下按<F2> 键。
    • 谢谢 :) 只是一件事.. 我注意到在光标之前插入了空格。如果在光标后插入空格(光标保持在同一位置),代码是什么
    • @Remonn:不,光标之前没有插入空格。正如您所要求的,它们被插入到光标位置。我看到很多人对此感到困惑。当光标是一个块(正常模式)时,这很容易。如果您将其定位在第 32 个字符并点击i,则新字符将插入第 32 个位置。说得通?现在,如果你想在光标之后插入,你需要“追加”所以使用a 而不是i。请记住,当光标是细条(插入模式)时,它不会位于两个字符之间——光标永远不会那样做——你只是看到它的左边部分。
    【解决方案2】:
    1. 您可以为此使用 vim 寄存器:

    "a 定义寄存器 a,如果你用 "ax 剪切一个空格,则寄存器 a 有空格。然后使用:

    30"ap

    1. 用 x 剪切一个空格并用 30p 粘贴它

    注意:寄存器不会忘记它的价值,所以第一个解决方案更有用。

    【讨论】:

    • 总是很高兴表明有很多方法可以做同样的事情,所以 +1,即使我认为 khachick 的回答是我会做的方式。
    【解决方案3】:

    除了已经给出的答案,我可以说光标位置在正则表达式中用\%# 表示,所以s/\%#/\=repeat(" ", 30)/ 将在光标位置添加30 个空格,就像30i<Space><Esc> 一样。

    【讨论】:

    • 谢谢 ZyX。光标移动到行首。是否可以将光标保持在同一位置(在光标后放置空格)?
    • @Remonn 30a<Space><Esc>s/\%(\%#\%(.\|$\)\)\@<=/\=repeat(" ", 30)/。如果您不想移动光标,则必须用let winview=winsaveview() | ... | call winrestview(winview) 包围每个命令。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-20
    • 2017-03-31
    • 1970-01-01
    • 2012-01-07
    • 2014-04-30
    • 2023-04-02
    相关资源
    最近更新 更多