vim 之批量 处理

GOOGLE:  vim 批量 执行 ex脚本;


原文: http://my.oschina.net/alphajay/blog/56286            vim的ex模式介绍


原文: http://man.chinaunix.net/newsoft/vi/doc/usr_26.html


(一)   改动多个文件

假定你有个变量名为 "x_cnt" 而你要把他改为 "x_counter"。这个变量在多个 C 文件都
被用到了。你需要在所有文件中作此改动。你得这么做。
   把所有相关文件放进参数列表:

        :args *.c

这个命令会找到所有的 C 文件并编辑其中的第一个。现在你可以对所有这些文件执行
置换命令:

        :argdo %s/\<x_cnt\>/x_counter/ge | update

命令 ":argdo" 把另一个命令当作其参数。而后者将对参数列表内所有的文件执行。
   作为参数的替换命令 "%s" 作用于所有文本行。它用 "\<x_cnt\>" 来查找"x_cnt"。 "\<" 和 "\>" 用来指定仅匹配那些完整的词,而不是 "px_cnt" 或 "x_cnt2"。
   替换命令的标记中包含 "g",用以置换同一行文本内出现的所有的匹配词 "x_cnt"。
标记 "e" 用于避免因文件中找不到 "x_cnt" 而出现错误信息。否则 ":argdo" 命令就会在遇到第一个找不到 "x_cnt" 的文件时中断。
   字符 "|" 分隔两条命令。后面的 "update" 命令将那些有改动的文件存盘。如果没有 "x_cnt" 被改成 "x_counter",这个命令什么也不做。

还有一个 ":windo" 命令,用于在所有视窗内执行其参数所规定的命令。以及 ":bufdo"
命令,对所有缓冲执行其参数所规定的命令。使用中要小心,因为你在缓冲列表中的文
件数量可能超过你能想像的。请用 ":buffers" 命令 (或 ":ls") 来检查缓冲列表。


(二)

在 shell script 里使用 Vim

假定你要在很多文件内把字符串 "-person-" 改成 "Jones",然后把它们打印出来。你
该怎么做?  一种方法是键入许许多多命令。另一种是写个 shell 脚本来完成这件工作。
   作为一个可视的交互式的编辑器,Vim 在执行普通模式命令时表现得极为出色。然而
在批量处理时,普通模式命令无法产生简洁的带有注释的命令文件; 在此,你该转而利
用 Ex 模式。该模式为你提供一种友好的命令行介面,方便你把命令写进一个批处理文件。
("Ex 命令" 无非是命令行 (:) 命令的另一个名称。)
   以下就是你所需要的 Ex 模式命令:

        %s/-person-/Jones/g
        write tempfile
        quit

你把这些命令放进文件 "change.vim" 里。现在就用这个 shell 脚本在批量模式下运
行编辑器:

        for file in *.txt; do
          vim -e -s $file < change.vim
          lpr -r tempfile
        done

循环 for-done 是一个 shell 结构,用来重复执行循环结构内的两行命令,而变量
$file 则在每次循环时被设成不同的文件名。
   脚本第二行的作用是对文件 $file 运行 Vim 且在 Ex 模式下 (参数 -e ),并从文
件 "change.vim" 读取命令。 参数 -s 告诉 Vim 运行在沉默模式下。换言之,不要持
续不断的发出 :prompt,或针对那个问题发出的任何别的提示。
   命令 "lpr -r tempfile" 打印执行中产生的文件 "tempfile" 并把它删除 (是参
数 -r 的作用)。


从 标 准 输 入 读 取

Vim 能从标准输入读取文本。由于通常从那里读取的是命令,你得告诉 Vim 你读的是
文本。这需要在通常是文件名的地方传送一个参数 "-"。 例如:

        ls | vim -

这个命令让你编辑 "ls" 命令的输出结果,而不必先把那些输出文本存入一个文件。
   如果你从标准输入读取文本,那么你可以用参数 "-S" 来读取脚本:

        producer | vim -S change.vim -


普 通 模 式 脚 本

如果你真的要在脚本内利用普通模式命令,你可以这样来用:

        vim -s script file.txt ..。

        注意:
        当 "-s" 不与 "-e" 一起用时,它的意思是不同的。此时,它 的意思是把文件 "script" 里的命令当作普通模式命令来执行。
        而与 "-e" 一起用时,它的意思是保持沉默,并不会把下一个参数视为文件名。

文件 "script" 里的命令就像你键入它们那样得到执行。别忘了分行符被解释成按下回车键 <Enter>。在普通模式下该键把光标移到下一行。
   要创建这么一个脚本你可以编辑这个脚本文件,键入那些命令。你得想一想每个命令
会产生什么样的结果。这可不那么容易。另一种方法是在你手动执行那些命令时把它们
记录下来。 你可以采用下面的方法:

        vim -w script file.txt ..。

所有键入的字符都将被写进文件 "script"。如果你犯了个小错误,不妨继续输入。但要记得事后更正一下这个脚本文件。

   参数 "-w" 会将新键入的命令附加在一个已存在的脚本文件末尾。这在你需要一点儿一点儿记录该脚本时是很不错的。
 
  但当你要从零开始重新记录你的脚本时,你则需要用 "-W" 参数。 该参数重写任何已存在的文件。


原文:    http://man.lupaworld.com/content/manage/vi/doc/starting.html

-nb                                                 
-nb={fname}
-nb:{hostname}:{addr}:{password}
                试图连接到 Netbeans 并成为它的一个编辑器服务器。第二种形式指定
                一个文件,从该文件里可以读取连接的信息。第三种形式指定
                Netbeans 需要的机器名、地址和密码信息。|netbeans-run|

一个使用脚本文件为若干文件里换名的例子:
        创建文件 "subs.vi",里面包含替换命令和 :wq 命令:
                :%s/Jones/Smith/g
                :%s/Allen/Peter/g
                :wq

        对所有你要改变的文件执行 Vim:

                foreach i ( *.let ) vim -s subs.vi $i

<think>嗯,用户问的是如何在Vim中进行批量替换字符。首先,我需要回想一下Vim的基本替换命令。记得基本语法是:s/old/new/,不过批量替换的话可能需要用到范围或者全局替换。 首先,确定用户是否了解普通替换,可能需要先简单说明单个替换,再扩展到批量操作。比如,替换当前行的第一个匹配项是:s/old/new/,全部替换是加g标志,像:s/old/new/g。 然后,用户问的是批量,可能涉及多行或者整个文件。这时候需要用范围,比如%表示整个文件,所以:%s/old/new/g。或者指定行数,比如10,20s/old/new/g替换10到20行。 另外,可能用户需要确认替换,这时候可以提到c标志,比如:%s/old/new/gc,每次替换前询问。还有,可能需要处理特殊字符,比如用\转义,或者使用不同的分隔符,比如用#代替/,当路径中有斜杠时更方便。 还有,可能用户不知道可视模式选择区域后替换,这时候可以补充,用:'<,'>s/old/new/g在选中行替换。或者使用宏来批量处理多个文件,不过这可能稍微复杂一点。 需要检查是否有遗漏的情况,比如大小写敏感,可以加入\c忽略大小写,或者使用:set ignorecase。还有,替换确认的提示信息是什么意思,比如y/n/a/q等选项的解释。 最后,记得举例说明,这样用户更容易理解。比如:%s/foo/bar/gc整个文件替换foo为bar并确认。或者用:%s#/old/path#/new/path#g替换路径中的斜杠。 可能需要提醒用户备份文件,或者在替换前使用:set nobackup现在不备份,但建议先保存。另外,提到一些常见问题,比如未保存导致替换丢失,或者正则表达式的使用注意事项,比如特殊字符需要转义。 总结步骤的话,应该是先说明基本替换命令,再讲范围替换,然后是一些选项标志,最后给出例子和注意事项。这样结构清晰,用户能一步步跟着操作。</think>在 Vim 编辑器中进行批量字符替换主要使用 `:s`(substitute)命令,配合不同的作用范围和参数实现。以下是具体操作指南: --- ### 一、基础替换语法 ```vim :[范围]s/旧内容/新内容/[标志] ``` --- ### 二、常用场景示例 #### 1️⃣ 当前行替换 - 替换第一个匹配项 `:s/foo/bar/` - 替换所有匹配项 `:s/foo/bar/g` #### 2️⃣ 指定行范围替换 - 替换第 5-10 行 `:5,10s/foo/bar/g` - 替换当前行到文件末尾 `:.,$s/foo/bar/g` #### 3️⃣ 全文替换 ```vim :%s/foo/bar/g ``` - `%` 表示整个文件 - `g` 表示替换行内所有匹配项 #### 4️⃣ 带确认的替换 ```vim :%s/foo/bar/gc ``` 每处替换前会询问: - `y` 替换 - `n` 跳过 - `a` 替换所有 - `q` 退出 --- ### 三、高级技巧 #### 🔸 处理特殊字符 - 路径中的 `/` 可用其他符号替代(如 `#`) `:%s#/old/path#/new/path#g` #### 🔸 正则表达式替换 - 删除行尾空格 `:%s/\s\+$//g` - 替换数字 `:%s/\d\+/123/g` #### 🔸 跨文件批量替换 1. 用 `:argdo` 处理多个文件 ```vim :args *.txt " 加载所有 txt 文件 :argdo %s/foo/bar/g | update " 替换并保存 ``` --- ### 四、注意事项 1. 替换前建议先保存文件(`:w`) 2. 按 `u` 可撤销替换操作 3. 用 `:set hlsearch` 可高亮匹配内容 4. 正则表达式需注意转义特殊字符(如 `*` `.` `$` 等) --- ### 五、完整命令示例 ```vim " 将全文的 'apple' 替换为 'orange'(带确认) :%s/apple/orange/gc " 替换 1-50 行的 'cat' 为 'dog'(忽略大小写) :1,50s/\<cat\>/dog/gi ``` 掌握这些技巧后,可以高效完成各种文本批量替换任务。建议在非关键文件上先练习操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值