vim 替换操作和特定行删除
Posted lanlancky
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vim 替换操作和特定行删除相关的知识,希望对你有一定的参考价值。
字符串替换
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
vim常用操作
移动
0:数字0,移动到光标所在行首
$:移动到光标所在行尾
插入
i 从光标处插入,不会覆盖后面的内容
a 从光标位置下一个字符处插入
A 从光标所在行的行尾处插入
o 从光标所在行的下一行插入新的一行
O 从光标所在行的上一行插入新的一行
r 替换光标处的字符
R 替换光标处 的字符,并保持,会覆盖后面的内容
删除
x 向后删除一个字符,类似【delete】
X 向前删除一个字符,类似【backspace】
dd 删除光标所在行
ndd:n为数字,从光标位置开始,向下删除n行
复制粘贴
yy 复制光标所在的那一行
nyy n为数字,从光标位置开始,向下复制n行
p 粘贴到光标位置的下一行
搜索检查
:a、bs/word1/word2/g a、b为行数,表示在a行到b行之间搜索word1,并替换为word2
:1、$s/word1/word2/g 从第一行到最后一行,查找word1并替换为word2
:1、$s/word1/word2/gc 从第一行到最后一行,查找word1并替换为word2,替换时会出现提示,给用户确认是否替换
n:重复前一个搜索的动作,向下搜索
N:向上搜索
保存
:wq 保存退出
:e! 将文件还原到未编辑状态
ZZ 保存退出
q! 强制退出不保存
:w 另存为
:r 编辑数据中,读入令一个文件的数据,并显示到当前光标位置的行的后面
:a、b w 将a行到b行之间的内容另存为
u : 复原撤销上一个操作
ctrl+r : 重复上一个操作
. : 重复上一个操作
:set nu 显示行号
:set nonu取消显示
全局显示行号:直接修改/etc/vimrc 写入 set nu并保存退出即可
当前用户显示:修改当前用户的vimrc文件添加set nu即可
将另一个文件内容填充到当前文件中
:r /path/to/somefile
在vim编辑过程中,可以执行命令
:! COMMAND
语法高亮开启/关闭
:syntax on/off
查找到的文本高亮显示
:set hlsearch
:set nosearch
以上是关于vim 替换操作和特定行删除的主要内容,如果未能解决你的问题,请参考以下文章