查看Vim

时间:2017-05-14 10:15:03

标签: vim substitution

假设我需要通过Vim的README文件中的以下摘录将模式commands?替换为大写版本。以下命令有效,

:%s/\vcommands?/\=toupper(submatch(0))/g

问题:如何将更改视为列表以确保替换正确?

以下是我尝试的一些尝试。

  1. 查看difference between the current buffer and the original file"。工作流程是在进行替换之前保存缓冲区,然后进行替换,并使用链接页面上提到的命令:DiffSaved来查看差异。它适用于小文档。对于大型的,找到变化很难。

  2. 使用l命令的substitute标志。 :help :s表示标记l“打印文本|:list|。”我通过在l标志后添加标记g来尝试此操作。它说“在3行上有5个替换”,并显示最后一行有替换。它看起来很有希望,但我不知道如何用变化查看每一行。

  3. 捕获ex命令输出。由于:s是一个ex命令,我应该能够捕获它的输出。这个wiki page显示了这些步骤。它使用redir cmd。我捕获的输出与我使用尝试2看到的输出相同。不是显示每行有变化,而是简单地说

    5 substitutions on 3 lines
    6 line editing, COMMAND typeahead display, COMMAND to display$
    
  4. 替换示例的文字:

    Vi IMproved.  A clone of the UNIX text editor Vi.  Very useful
    for editing programs and other plain ASCII text.  Full Vi
    compatibility and includes all Ex commands.  Extra features
    above Vi: Multilevel undo, multiple windows, syntax
    highlighting, command line history, folding, improved command
    line editing, command typeahead display, command to display
    yank buffers, possibility to edit binary files, file name
    stack, support for Manx QuickFix and other compiler's error
    messages, shows current file name in window title, on-line
    help, rectangular cut/paste, etc., etc., etc...
    

2 个答案:

答案 0 :(得分:0)

不完全符合您的要求,但使用c标志确认每项更改怎么办?这是, :%s/\vcommands?/\=toupper(submatch(0))/gc

答案 1 :(得分:0)

这表示更改的行按了“''并等待按键, 在进行下一次更改之前,:%s,old,new,gicp# 没有任何保证,受gnu-emacs查询替换的启发。

a