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 替换操作和特定行删除的主要内容,如果未能解决你的问题,请参考以下文章

Vim 常用操作

vim 常用命令删除撤销恢复复制粘贴替换

vim 常用命令删除撤销恢复复制粘贴替换

vim常用操作

vim操作总结

vim常用操作