菜鸟科技网

vi命令行模式有哪些核心操作?

Linux vi 编辑器的命令行模式是其核心操作模式之一,用户在 vi 中打开文件后,默认进入的就是这种模式,命令行模式主要用于导航、执行文本操作命令(如复制、粘贴、删除、查找等),以及进入其他模式(如插入模式、末行模式),熟练掌握命令行模式的操作是高效使用 vi 的关键,以下将详细介绍该模式的功能、常用命令及使用技巧。

vi命令行模式有哪些核心操作?-图1
(图片来源网络,侵删)

在命令行模式下,所有输入都会被解释为命令,而非文本内容,用户需要明确当前所处的模式,避免误操作,若在命令行模式下直接输入字母,系统会将其视为命令执行,而非插入文本,这种设计虽然初学者可能感到不适应,但一旦熟练,便能通过快捷键实现高效编辑。

基本导航命令

导航是命令行模式最基础的功能,通过快捷键快速定位光标位置,提高编辑效率。

  • 字符级导航
    • h:光标左移一个字符。
    • l:光标右移一个字符。
    • j:光标下移一行。
    • k:光标上移一行。
    • ^:移动到当前行的第一个非空白字符。
    • 移动到当前行的末尾。
  • 单词级导航
    • w:移动到下一个单词的起始位置(标点符号视为分隔符)。
    • e:移动到下一个单词的末尾。
    • b:移动到上一个单词的起始位置。
    • WEB:与 web 类似,但将标点符号视为单词的一部分。
  • 行与屏幕级导航
    • gg:跳转到文件的第一行。
    • G:跳转到文件的最后一行。
    • nG(如 5G):跳转到第 n 行。
    • H:跳转到屏幕的第一行。
    • M:跳转到屏幕的中间行。
    • L:跳转到屏幕的最后一行。
  • 滚动屏幕
    • Ctrl+f:向下滚动一页(forward)。
    • Ctrl+b:向上滚动一页(backward)。
    • Ctrl+d:向下滚动半页(down)。
    • Ctrl+u:向上滚动半页(up)。

文本编辑命令

命令行模式支持高效的文本编辑操作,包括删除、复制、粘贴等,这些命令通常与动作命令结合使用。

  • 删除命令(d)
    • x:删除光标所在处的字符。
    • X:删除光标左侧的字符。
    • dd:删除当前行。
    • ndd(如 3dd):删除从当前行开始的 n 行。
    • d^:删除从光标处到行首的内容。
    • d$:删除从光标处到行尾的内容。
    • dw:删除一个单词。
    • dG:删除从当前行到文件末尾的所有内容。
  • 复制命令(y)
    • yy:复制当前行。
    • nyy(如 2yy):复制从当前行开始的 n 行。
    • y^:复制从光标处到行首的内容。
    • y$:复制从光标处到行尾的内容。
    • yw:复制一个单词。
  • 粘贴命令(p)
    • p:将缓冲区中的内容粘贴到光标所在位置的下一行(针对行操作)或光标右侧(针对字符操作)。
    • P:将缓冲区中的内容粘贴到光标所在位置的上一行(针对行操作)或光标左侧(针对字符操作)。
  • 替换与撤销
    • r:替换光标所在处的字符(如 ra 将当前字符替换为 a)。
    • R:进入替换模式,连续替换光标处的字符。
    • u:撤销上一次操作。
    • Ctrl+r:重做被撤销的操作。

搜索与替换命令

  • 文本搜索
    • /pattern:从光标处向下搜索匹配 pattern 的文本,按 n 跳转到下一个匹配项,N 跳转到上一个匹配项。
    • ?pattern:从光标处向上搜索匹配 pattern 的文本,nN 的跳转方向与 相反。
  • 替换命令(需进入末行模式)
    • s/old/new:替换当前行中第一个 oldnew
    • s/old/new/g:替换当前行中所有 oldnew
    • %s/old/new/g:替换整个文件中所有 oldnew
    • n,ms/old/new/g:替换第 n 行到第 m 行中所有 oldnew

其他实用命令

  • 重复执行

    (点号):重复上一次的编辑命令(如删除、复制等)。

    vi命令行模式有哪些核心操作?-图2
    (图片来源网络,侵删)
  • 合并行
    • J:将当前行与下一行合并为一行。
  • 显示/隐藏行号
    • set nu:显示行号。
    • set nonu:隐藏行号。
  • 退出 vi
    • q:退出 vi(若未修改文件)。
    • q!:强制退出 vi(不保存修改)。
    • wqx:保存修改并退出。

命令行模式与模式的切换

命令行模式是 vi 的“中枢”,通过特定命令可进入其他模式:

  • i(insert)、a(append)、o(open new line below)等进入插入模式,用于输入文本。
  • 按 (冒号)进入末行模式,执行保存、退出、替换等全局命令。
  • v 进入可视模式,选择文本块后进行编辑操作。
  • 插入模式下按 Esc 键可返回命令行模式。

命令行模式操作技巧

  1. 组合命令:通过“操作+动作”组合实现高效编辑,如 d2w(删除两个单词)、y3l(复制三个字符)。
  2. 使用寄存器:通过 "寄存器号+命令 操作指定寄存器,如 "ayy 将当前行复制到寄存器 a"ap 从寄存器 a 粘贴。
  3. 标记与跳转:通过 m(mark)设置标记(如 ma 在当前行设置标记 a),通过 (单引号)跳转到标记位置(如 'a 跳转到标记 a 所在行)。

以下为常用命令的总结表格:

命令类型 命令 功能说明
光标移动(字符级) h、j、k、l 左、下、上、右移动光标
光标移动(行级) gg、G、nG 跳转至首行、末行、第n行
光标移动(单词级) w、e、b 跳转至下一个单词首/末、上一个单词首
删除 dd、ndd、dw 删除当前行、n行、一个单词
复制 yy、nyy、yw 复制当前行、n行、一个单词
粘贴 p、P 粘贴至光标下/上或左/右
撤销与重做 u、Ctrl+r 撤销、重做操作
搜索 /pattern、?pattern 向下/向上搜索文本
退出 wq、:q! 保存退出、不保存强制退出

相关问答FAQs

Q1: 在 vi 命令行模式下,如何快速删除从当前光标到行首的内容?
A1: 使用命令 d^d 表示删除操作,^ 表示跳转到当前行的第一个非空白字符,组合后即可删除光标到行首的所有字符,若光标位于某行中间,输入 d^ 后,该行从光标处到行首的内容将被删除。

Q2: 如何在 vi 命令行模式下替换整个文件中所有特定字符串?
A2: 需进入末行模式执行替换命令,在命令行模式下按 ,输入 %s/old_string/new_string/g,按回车即可。 表示整个文件,s 表示替换,old_string 为被替换的字符串,new_string 为替换后的字符串,g 表示全局替换(即替换所有匹配项,而非仅第一个),若需确认替换,可将 g 改为 gc,即 %s/old_string/new_string/gc,此时每次替换前会提示用户确认。

vi命令行模式有哪些核心操作?-图3
(图片来源网络,侵删)
分享:
扫描分享到社交APP
上一篇
下一篇