vim 替换操作和特定行删除

发布时间 2023-04-27 11:58:34作者: luckylan

字符串替换

1.先按Esc进入命令模式,然后再打出‘:’(英文输入模式下)

2.输入格式:  首行数,末行数s/要替换的字符串/替换的字符串/g   ;        常用操作为      :start_line, end_line  s/xxx/xxx/

(不加g只替换每行的第一个要替换的字符串,后面的不会替换, s代表字符串的意思)

 

:{作用范围}s/{目标}/{替换}/{替换标志}    %s(substitute)命令用来查找和替换字符串
:12,22s/abc/123/g  %将12行到22行的字符串’abc‘替换成’123‘,加g一行可以替换多次
:%s/abc/123/  %将文中所有的abc都替换为123,不加g只替换每行的第一个要替换的字符串
:%s/^/\/\//g %行首加注释符号‘//
:%s/xxx/xxx/  %首行为1,末行为$的替换,默认一行只替换一次
%s/xxx/xxx/g  %全部替换

r  替换光标所在的字符
cl 修改当前字符
cc:修改当前行
c$  修改到行尾的内容
=ddp:上下两行交换(其实是先dd,然后执行p)
%s/foo/bar/g           会在全局范围(%)查找 foo 并替换为 bar,所有出现都会被替换(g)
:%s/foo/bar/gc         将每个 'foo' 更改为 'bar',但首先要求确认
:s/foo/bar/g           查找每次出现的“foo”(仅在当前行中),并将其替换为“bar”
:%s\</foo\>/bar/gc        将每个 'foo' 更改为 'bar',但首先要求确认
:%s/foo/bar/gci        将每个“foo”(由于标志不区分大小写i)更改为“bar”;要求确认
:%s/foo\c/bar/gc        是相同的,因为\c使搜索不区分大小写,在使用:set noignorecase使搜索区分大小写(默认)后可能需​​要这样做
:%s/foo/bar/gcI        将每个'foo'(由于标志区分大小写I)更改为'bar';要求确认
:%s/foo\C/bar/gc       是相同的,因为\C使搜索区分大小写,:set ignorecase在使用使搜索不区分大小写之后可能需要这样做
:5,12s/foo/bar/g    将第 5 行到第 12 行(含)的所有行的每个 'foo' 更改为 'bar'。
:'a,'bs/foo/bar/g 对于从标记 a 到标记 b 的所有行,将每个 'foo' 更改为 'bar'(请参见下面的注释)。
:'<,'>s/foo/bar/g    使用+visual 编译时,将可视visual选择中所有行的每个 'foo' 更改为 'bar'。当您选择一个区域并输入 :.时,Vim 会自动为任何 ex 命令附加可视选择范围('<,'>)
:.,$s/foo/bar/g    对于从当前行 (.) 到最后一行 ($) 的所有行,将每个 'foo' 更改为 'bar'。
:.,+2s/foo/bar/g    将当前行 (.) 和下两行 (+2) 的每个 'foo' 更改为 'bar'。
:g/^baz/s/foo/bar/g    将以“baz”开头的行中的每个“foo”更改为“bar”。

注意:从 Vim 7.3 开始,默认情况下,应用于由标记或可视选择(使用特殊类型的标记 '< 和 '>)定义的范围的替换不受标记的列位置限制。相反,Vim 将替换应用于每个标记出现的整行,除非\%V原子用于以下模式::'<,'>s/\%Vfoo/bar/g.

/word:向光标之下寻找一个名称为 word 的字符串。例如要在档案内搜寻 vbird 这个字符串,就输入 /vbird 即可! (常用)
?word:向光标之上寻找一个字符串名称为 word 的字符串。
n:这个 n 是英文按键。代表重复前一个搜寻的动作。举例来说, 如果刚刚我们执行 /vbird 去向下搜寻 vbird 这个字符串,则按下 n 后,会向下继续搜寻下一个名称为 vbird 的字符串。
  如果是执行 ?vbird 的话,那么按下 n 则会向上继续搜寻名称为 vbird 的字符串! N:这个 N 是英文按键。与 n 刚好相反,为『反向』进行前一个搜寻动作。 例如 /vbird 后,按下 N 则表示『向上』搜寻 vbird 。 n<space>:那个 n 表示『数字』,例如 20 。按下数字后再按空格键,光标会向右移动这一行的 n 个字符。例如 20<space> 则光标会向后面移动 20 个字符距离。 0 或功能键[Home]:这是数字『 0 』:移动到这一行的最前面字符处 (常用) $ 或功能键[End]:移动到这一行的最后面字符处(常用) H:光标移动到这个屏幕的最上方那一行的第一个字符 M:光标移动到这个屏幕的中央那一行的第一个字符 L:光标移动到这个屏幕的最下方那一行的第一个字符 G:移动到这个档案的最后一行(常用) nG:n 为数字。移动到这个档案的第 n 行。例如 20G 则会移动到这个档案的第 20 行(可配合 :set nu) gg:移动到这个档案的第一行,相当于 1G 啊! (常用) n<Enter>:n 为数字。光标向下移动 n 行(常用)

跳到指定行:命令行输入“ : n ” 然后回车

删除特定行

删除空行            :g/^$/d
删除空行以及只有空格的行    :g/^\s*$/d
删除以 # 开头或 空格# 或 tab#开头的行
:g/^\s*#/d    对于 php.ini 配置文件,注释为 ; 开头
:g/^\s*;/d    使用正则表达式删除行
如果当前行包含 bbs ,则删除当前行  :/bbs/d
删除从第二行到包含 bbs 的区间行  :2,/bbs/d
删除从包含 bbs 的行到最后一行区间的行
:/bbs/,$d  删除所有包含 bbs 的行
:g/bbs/d  删除匹配 bbs 且前面只有一个字符的行
:g/.bbs/d   删除匹配 bbs 且以它开头的行
:g/^bbs/d  删除匹配 bbs 且以它结尾的行
:g/bbs$/d  .ini 的注释是以 ; 开始的,如果注释不在行开头,那么删除 ; 及以后的字符
:%s/\;.\+//g  删除 # 之后所有字符
%s/\#.*//g