美文网首页
12. Linux vi

12. Linux vi

作者: 独木舟的木 | 来源:发表于2019-02-05 20:01 被阅读14次

[TOC]

vi

使用 vi 的三个原因

  1. vi 很多系统都预装。
  2. vi 是轻量级且执行快速的编辑器。
  3. 我们不希望其他 Linux 和 Unix 用户把我们看作胆小鬼。

大多数 Linux 发行版不包含真正的 vi;而是自带一款高级替代版本,叫做 vim(它是 “vi improved” 的简写)由 Bram Moolenaar 开发。vim 相对于传统的 Unix vi 来说,取得了实质性进步。通常,vim 在 Linux 系统中是 “vi” 的符号链接(或别名)。

💡 小贴示
如果你在 vi 中 “迷失” 了,试着按下 Esc 键两次来找到路(回到普通模式)。

三种模式

三种模式的相互切换
  • 命令模式
    dd、ndd:删除 n行
    yy、nyy:复制
    /name ?name 搜索匹配字符
    i:插入模式
    a:追加文本
    A:将光标移动到当前行尾,同时切换到 insert 模式。
    o:在下方插入新行
    u:撤销最后一次修改
    
  • 输入模式

  • 末行模式

    w:保存
    q: 退出Vi
    q!: 强制退出vi,但是不保存设置。
    wq: 保存设置并退出。
    /*** 查找
    

移动光标

命令 行为
l or 右箭头 向右移动一个字符
h or 左箭头 向左移动一个字符
j or 下箭头 向下移动一行
k or 上箭头 向上移动一行
0(零按键) 移动到当前行的行首。
^ 移动到当前行的第一个非空字符。
$ 移动到当前行的末尾。
w 移动到下一个单词或标点符号的开头。
W 移动到下一个单词的开头,忽略标点符号。
b 移动到上一个单词或标点符号的开头。
B 移动到上一个单词的开头,忽略标点符号。
Ctrl+F or Page Down 向下翻一页
Ctrl+B or Page Up 向上翻一页
numberG 移动到第 number 行。例如,1G 移动到文件的第一行。
G 移动到文件末尾。

vi 中的许多命令都可以在前面加上一个数字,比方说上面提到的 "G" 命令。
在命令之前加上一个 数字,我们就可以指定命令执行的次数。
例如,命令 "5j" 导致 vi 向下移动 5 行。

打开一行

命令 行为
o 当前行的下方打开一行。
O 当前行的上方打开一行。

删除文本

删除命令 删除的文本
x 当前字符
3x 当前字符及其后的两个字符。
dd 当前行。
5dd 当前行及随后的四行文本。
dW 从光标位置开始到下一个单词的开头。
d$ 从光标位置开始到当前行的行尾。
d0 从光标位置开始到当前行的行首。
d^ 从光标位置开始到文本行的第一个非空字符。
dG 从当前行到文件的末尾。
d20G 从当前行到文件的第 20 行。

剪切、复制和粘贴文本

d 命令不仅删除文本,它还 “剪切” 文本。每次我们使用 d 命令,删除的部分被复制到一个粘贴缓冲区中(看作剪切板)。过后我们执行小 p 命令把剪切板中的文本粘贴到光标位置之后, 或者是大 P 命令把文本粘贴到光标之前。

复制命令 复制的内容
yy 当前行。
5yy 当前行及随后的四行文本。
yW 从当前光标位置到下一个单词的开头。
y$ 从当前光标位置到当前行的末尾。
y0 从当前光标位置到行首。
y^ 从当前光标位置到文本行的第一个非空字符。
yG 从当前行到文件末尾。
y20G 从当前行到文件的第 20 行。

连接行

大写 J 把行与行之间连接起来。

查找和替换

查找一行

f 命令查找一行,移动光标到下一个所指定的字符上。例如,命令 fa 会把光标定位到同一行中下一个出现的 "a" 字符上。在一行中执行了字符的查找命令之后,通过输入分号来重复这个查找。

查找整个文件

/string 查找某个单词或短语,n 命令重复先前的查找。

全局查找和替换

vi 使用 ex 命令来执行查找和替代操作(vi 中叫做 “替换”)。

示例:把整个文件中的单词“line”更改为“Line”:

:%s/line/Line/g
条目 含义
: 冒号字符运行一个 ex 命令。
% 指定要操作的行数。% 是一个快捷方式,表示从第一行到最后一行。另外,操作范围也可以用 1,5 来代替(因为我们的文件只有 5 行文本),或者用 1,$ 来代替,意思是 “从第一行到文件的最后一行。” 如果省略了文本行的范围,那么操作只对当前行生效。
s 指定操作。在这种情况下是,替换(查找与替代)。
/line/Line 查找类型与替代文本。
g 这是 “全局” 的意思,意味着对文本行中所有匹配的字符串执行查找和替换操作。如果省略 g,则只替换每个文本行中第一个匹配的字符串。

示例,加“c”字符,指定一个需要用户确认的替换命令

# c:指定用户需要确认替换
:%s/line/Line/gc
replace with line (y/n/a/q/l/^E/^Y)?
替换确认按键选项 行为
y 执行替换操作
n 跳过这个匹配的实例
a 对这个及随后所有匹配的字符串执行替换操作。
q or esc 退出替换操作。
l 执行这次替换并退出。l 是 “last” 的简写。
Ctrl+E, Ctrl+Y 分别是向下滚动和向上滚动。用于查看建议替换的上下文。

vim 搜索高亮设置

依赖于系统中 vim 的特殊配置,搜索🔍匹配项将会被高亮显示。如若不是,试试这个命令模式:

:hlsearch

编辑多个文件

同时编辑多个文件:vi file1 file2 file3...

文件之间转换

  • 从这个文件转到下一个文件::n
  • 回到先前的文件::N

查看正在编辑的文件列表:

:buffers
1 #     "foo.txt"                 line 1
2 %a    "ls-output.txt"           line 0
Press ENTER or type command to continue

然后可以使用缓冲区号码来转换文件::buffer 1

从一个文件复制内容到另一个文件

使用缓冲区号码来在文件之间切换::buffer 1

插入整个文件到另一个文件

:r 命令(是 "read" 的简称)把指定的文件插入到光标位置之前:

:r file.txt

保存

  • 在命令模式下,输入 zz 保存并退出当前文件。
:w 保存
:wq 保存并退出
:w file.txt 保存指定文件为副本(类似于 Save As...)

vim 口令速查表

image
image
image
image
image
image
image
image
image
image
参考:Micheal: VIM Cheat Sheet for Programmers

参考

相关文章

网友评论

      本文标题:12. Linux vi

      本文链接:https://www.haomeiwen.com/subject/uobvsqtx.html