为什么这一系列命令不起作用



我正在尝试创建一个命令,该命令将当前行复制到新选项卡,然后在句号(.(处将其断开,然后在下面(文本末尾(添加一个空行,最后转到文本的开头(第一行(。我使用以下代码:

command Lnew y | tabnew | pu | s/. /rr/g | noh | o | 1G 

它可以工作到noh部分,但o1G部分不起作用。问题出在哪里?

您的命令是 Ex 命令和正常模式命令的混合体。您有两种选择:

  • 仅使用 Ex 命令

    y | tabnew | put | s/. /rr/g | nohlsearch | put='' | 1
    
  • 在正常模式命令前面加上:help :normal

    y | tabnew | put | s/. /rr/g | nohlsearch | normal! o^O1G
    

    使用<C-v><C-o>插入文字^O

可能的改进:

command! Lnew y | tabnew | pu  | -d | s/. /r/g | noh | pu=''  | 1

Ex 'put' 命令在复制的行上方添加一个新行。添加"-d"命令可解决此问题。

通过我的阅读,这个问题询问了在句号处拆分并在文本末尾添加空白行的问题。替换命令中似乎只需要一个"\r"。

在"查找和替换"命令中,还需要跳过空格,因此不要:

s/. /rr/g

您必须使用:

s/. /rr/g

在我早期的 Vim 中,我为此苦苦挣扎了很长一段时间。希望这有帮助。

最新更新