假设我需要通过Vim的README文件中的以下摘录将模式commands?
替换为大写版本。以下命令有效,
:%s/\vcommands?/\=toupper(submatch(0))/g
问题:如何将更改视为列表以确保替换正确?
以下是我尝试的一些尝试。
查看difference between the current buffer and the original file"。工作流程是在进行替换之前保存缓冲区,然后进行替换,并使用链接页面上提到的命令:DiffSaved
来查看差异。它适用于小文档。对于大型的,找到变化很难。
使用l
命令的substitute
标志。 :help :s
表示标记l
“打印文本|:list|
。”我通过在l
标志后添加标记g
来尝试此操作。它说“在3行上有5个替换”,并显示最后一行有替换。它看起来很有希望,但我不知道如何用变化查看每一行。
捕获ex命令输出。由于:s
是一个ex命令,我应该能够捕获它的输出。这个wiki page显示了这些步骤。它使用redir
cmd。我捕获的输出与我使用尝试2看到的输出相同。不是显示每行有变化,而是简单地说
5 substitutions on 3 lines
6 line editing, COMMAND typeahead display, COMMAND to display$
替换示例的文字:
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...
答案 0 :(得分:0)
不完全符合您的要求,但使用c
标志确认每项更改怎么办?这是,
:%s/\vcommands?/\=toupper(submatch(0))/gc
答案 1 :(得分:0)
这表示更改的行按了“''并等待按键, 在进行下一次更改之前,:%s,old,new,gicp# 没有任何保证,受gnu-emacs查询替换的启发。
a