前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >日更系列:使用vim像IDE一样搜索替换文本

日更系列:使用vim像IDE一样搜索替换文本

原创
作者头像
mariolu
发布2022-05-04 11:27:00
1.1K0
发布2022-05-04 11:27:00
举报

vim通用的搜索替换命令,但是这些其实有很多花样可以玩耍

代码语言:javascript
复制
:[range]s[ubstitute]/{pattern}/{string}/[flags] [count]

一、[range]的选择

1.1 %的意思

[range]可以选择,%代表全文。如果不使用%,那么只在当前行搜索替换。

比如说以下进行全文替换

代码语言:javascript
复制
:%s/old-text/new-text/g

而下面只进行当前行替换

代码语言:javascript
复制
:s/old-text/new-text/g

1.2 第m到第n行

这个range还可以这样写,比如第2行到第10行,写成"2,10"

代码语言:javascript
复制
:2,10s/old-text/new-text/g

1.3 方块区域

还比如说你通过vim的可视范围选择,通过CTRL + V ,使用方向键选择你要标注的文本区域,然后按‘:’ 会自动敲入 :'<,’> ,然后使用命令进行替换

代码语言:javascript
复制
:'<,'>s/helo/hello/g

其中符号的含义如下

代码语言:javascript
复制
'<  start line
`<  start character
'>  end line
`>  end character

1.4 vim的可视化模式基础知识

v选择文本可视区域,或者 V选择光标所在行,或者Ctrl-V (使用Ctrl-Q ,如果Ctrl-V设置成粘贴)选择方块区域。

选择完区域,移动光标所在区域 (比如j 是向下, w是移动一个单词,或者/进行搜索,}一个段落等),还可以使用 gv 选择上次的记忆区域,

1.5 一些例子

:s 匹配范围为整行,\%V则限定更小的区域,使其仅在可视范围选择内匹配。这适用于按字符和按块选择(但不适用于按行选择)。

例如,将光标放在这一行:

代码语言:javascript
复制
music amuse fuse refuse

在正常模式下,键入^wvee直观地选择“amuse fuse”(^转到第一个非空白字符,w向前移动一个单词,v进入视觉模式,e向前移动到下一个单词的末尾)。然后按 Escape 并输入以下命令,将当前行内最后选择的区域中的所有“us”更改为“az”:

代码语言:javascript
复制
:s/\%Vus/az/g

结果是:

代码语言:javascript
复制
:s/\%Vus/az/g

下面再看一个例子,

代码语言:javascript
复制
Before block with old and sold.
First told abc old sold gold.
Another is old, gold but not cold.
Last is older, fold not bold.
After block with fold and older and bold.

执行区域选择:

  • /abc 然后按住Enter跳到'abc'位置.
  • 按 Ctrl-V 进行方块选择 (或者Ctrl-Q ).
  • eee 跳到直到单词 "sold"的位置.
  • jj 往下跳到第三行
  • 按Escape跳出选择.

使用下面命令进行可视范围"old" 到 "NEW"的替换. T

代码语言:javascript
复制
:%s/\%Vold/NEW/g

结果是:

代码语言:javascript
复制
Before block with old and sold.
First told abc NEW sNEW gold.
Another is NEW, gNEW but not cold.
Last is NEWer, fNEW not bold.
After block with fold and older and bold.

二、flag作用

flags可以选择c(交互式,这里c会依次便利所有出现搜索词的地方,然后挨个让你确认是否替换),g(代表行的所有搜索词匹配地方,如果不加g,指的是一个行只会出现至多匹配一次),i(忽略大小写),

  1. [c] Confirm each substitution.
  2. [g] Replace all occurrences in the line.
  3. [i] Ignore case for the pattern.

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、[range]的选择
    • 1.1 %的意思
      • 1.2 第m到第n行
        • 1.3 方块区域
          • 1.4 vim的可视化模式基础知识
            • 1.5 一些例子
              • 二、flag作用
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档