博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Linux基础 - 文件管理 vi与vim编辑器

Posted on 2023-02-18 20:20  Kingdomer  阅读(50)  评论(0编辑  收藏  举报

 

一、匹配查找

在normal模式下按下/即可进入查找模式。

输入要查找的字符串并按下回车,vi会跳转到第一个匹配。 按n下查,按N反向向上查找。

跳转到指定位置:    跳转到文件末尾:G        跳转到指定行: 9G 跳转到第9行

1.1 正则匹配
vi查找支持正则表达式, 如 "/vim$" 匹配行尾的"vim"。
查找特殊字符需要转义, 如 "/vim\$"匹配"vim$"。

1.2 大小写敏感查找
在查找模式中,使用\c表示大小写不敏感查找,\C表示大小写敏感查找。默认大小写敏感。
/foo\c 将会查找到"foo"、"FOO"、"Foo"、"foobar"等字符串。

1.3 调整大小写不敏感查找

[root@cl-backup ~]# cat .vimrc
### 设置默认大小写不敏感查找
set ignorecase
### 如果查找的字符串中有一个大写字母,则切换到大小写敏感
set smartcase

如: /aa 能查找到 "aa" / "aA" / "AA" / "Aa" / "aabb" 等。 /Aa 只能查找到"Aa"、"Aavv"等字符串。

1.4 查找当前单词
在normal模式下,按下*即可查找光标所在单词(word), 要求每次出现的前后为空白字符或标点符号。

例如当前为foo,可以匹配foo bar中的foo,但不可匹配foobar中的foo。 这在查找函数名、变量名时非常有用。

按下g*即可查找光标所在单词的字符序列,每次出现前后字符无要求。 即foo bar和foobar中的foo均可被匹配到。

 

二、替换 

2.1 语法
:s(substitute)命令用来查找和替换字符串
语法:  :{作用范围}s/{目标}/{替换}/{替换标志}
例:   :%s/foo/bar/g 在全局范围(%)查找foo并替换为bar,所有出现都会被替换(g)

2.2 作用范围
当前行:           :s/aa/AA/g
全文:             :%s/aa/AA/g
特定行:           :5,12s/aa/AA/g
当前行到后面的5行: :.,+5s/aa/AA/g
选中的范围:       在Visual模式下选择区域后, 输入:, vi自动补全为 :'<,'>
                 :'<,'>s/aa/AA/g (s/aa/AA/g 是输入的内容)

 

2.3 g 表示 全局global替换
:%s/aa/AA          只替换全文的每一行第一次出现的匹配项
:%s/aa/AA/i        i表示大小写不敏感,I表示大小写敏感
:%s/aa\c/AA
:%s/aa/99/gI       全文匹配,大小写敏感; 等同于 :%s/aa\C/99/g
:%s/aa/99/gc       c表示确认,查找到的每一个位置,回车后vi会将光标移动到每一个位置,提示 replace with 99 (y/n/a/q/l/^E/^Y)?

                   y表示替换,n不替换,a替换所有,q退出查找模式,l替换当前位置并退出。^E 和 ^Y 是光标移动快捷键。

 

三、删除

删除当前行到最后一行   命令模式 dG   末行模式   :.,$d

删除指定范围的行      :1,10d

删除匹配到的行        :g/{pattern}/d

删除指定范围内匹配到的行    :1,10g/{pattern}/d

保留匹配到的行            :v/{pattern}/d

删除所有内容:      :1,$d

删除指定行到当前行: :1,.d

行内删除字符:

  • x:   删除当前光标处的字符
  • nx:  删除多个字符
  • X:   删除光标左边的字符
  • D:   删除从当前光标到本行末尾的字符
  • J:   删除两行之间的换行符 (亦可用于合并两行)
  • dd:  删除当前行
  • dw:  删除从当前位置到下一个空格的字符
  • d3w: 删除从当前位置到后三个空格的字符

 

删除行尾多个空格:  :%s/\s\+$//g

删除行首多个空格:  :%s/^\s*//g

删除所有数字:     :%s/\d//g

删除重复行:       :sort u

 

四、恢复与复制

u:   撤销上一命令对编辑缓冲区的修改

U:   恢复当前行(一次性撤销对当前行的全部修改,不包括删除)

.:   重复上一命令对编辑缓冲区的修改

p:   复制上一次删除的内容,插入到光标的后面

P:   复制上一次删除的内容,插入到光标的前面