Linux中的vi(Visual Editor)是一款强大的文本编辑器,它的全称是VIsual mode editor,最初出现在早期的UNIX系统中,现在已经成为Linux和类UNIX系统的标准编辑器之一。vi不仅适用于简单的文本编辑,还能处理复杂的编程任务。以下是对标题、描述和标签中提到的vi命令的详细解释:
1. **进入vi的命令**:
- `vi filename`:打开或新建文件,并将光标置于第一行首。
- `vi +n filename`:打开文件并将光标置于第n行首。
- `vi + filename`:打开文件并将光标置于最后一行首。
- `vi +/pattern filename`:打开文件并将光标置于第一个与pattern匹配的字符串处。
- `vi -r filename`:在上次使用vi编辑时系统崩溃,用于恢复filename。
2. **移动光标类命令**:
- `h`:光标左移一个字符。
- `l`:光标右移一个字符。
- `space`:光标右移一个字符。
- `Backspace`:光标左移一个字符。
- `k`或`Ctrl+p`:光标上移一行。
- `j`或`Ctrl+n`:光标下移一行。
- `Enter`:光标下移一行。
- `w`或`W`:光标右移一个单词至单词首。
- `b`或`B`:光标左移一个单词至单词首。
- `e`或`E`:光标右移一个单词至单词尾。
- `)`:光标移至句尾。
- `(`:光标移至句首。
- `{`:光标移至段落开头。
- `}`:光标移至段落结尾。
- `nG`:光标移至第n行首。
- `n+`:光标下移n行。
- `n-`:光标上移n行。
- `n$`:光标移至第n行尾。
- `H`:光标移至屏幕顶行。
- `M`:光标移至屏幕中间行。
- `L`:光标移至屏幕最后行。
- `0`:光标移至当前行首。
- `$`:光标移至当前行尾。
3. **屏幕翻滚类命令**:
- `Ctrl+u`:向文件首翻半屏。
- `Ctrl+d`:向文件尾翻半屏。
- `Ctrl+f`:向文件尾翻一屏。
- `Ctrl+b`:向文件首翻一屏。
- `nz`:将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部。
4. **插入文本类命令**:
- `i`:在光标前插入文本。
- `I`:在当前行首插入文本。
- `a`:在光标后插入文本。
- `A`:在当前行尾插入文本。
- `o`:在当前行之下新开一行插入文本。
- `O`:在当前行之上新开一行插入文本。
- `r`:替换当前字符。
- `R`:替换当前字符及其后的字符,直到按下ESC键。
- `s`:删除光标位置开始的指定数目字符并插入文本。
- `S`:删除指定数目的行并插入文本。
- `ncw` 或 `nCW`:修改指定数目的单词。
- `nCC`:修改指定数目的行。
5. **删除命令**:
- `ndw` 或 `ndW`:删除光标处开始及其后的n-1个单词。
- `do`:删除至行首。
- `d$`:删除至行尾。
- `ndd`:删除当前行及其后的n-1行。
- `x` 或 `X`:删除一个字符,x删除光标后的,X删除光标前的。
- `Ctrl+u`:删除输入模式下所输入的文本。
6. **搜索及替换命令**:
- `/pattern`:从光标开始处向文件尾搜索pattern。
- `?pattern`:从光标开始处向文件首搜索pattern。
- `n`:在同一方向重复上一次搜索命令。
- `N`:在反方向上重复上一次搜索命令。
- `:s/p1/p2/g`:将当前行中所有p1替换为p2。
- `:n1,n2s/p1/p2/g`:将第n1至n2行中所有p1替换为p2。
- `:g/p1/s//p2/g`:将文件中所有p1替换为p2。
7. **选项设置**:
- `all`:列出所有选项设置情况。
- `term`:设置终端类型。
- `ignorance`:在搜索中忽略大小写。
- `list`:显示制表位(Ctrl+I)和行尾标志($)。
- `number`:显示行号。
- `report`:显示由面向行的命令修改过的数目。
- `terse`:显示简短的警告信息。
- `warn`:在转到别的文件时若没保存当前文件则显示NO write信息。
- `nomagic`:允许在搜索模式中,使用前面不带“\”的特殊字符。
- `nowrapscan`:禁止vi在搜索到达文件两端时,又从另一端开始。
- `mesg`:允许vi显示其他用户用write写到自己终端上的信息。
8. **最后行方式命令**:
- `:n1,n2 co n3`:将n1行到n2行之间的内容拷贝到第n3行下。
- `:n1,n2 m n3`:将n1行到n2行之间的内容移至到第n3行下。
- `:n1,n2 d`:将n1行到n2行之间的内容删除。
- `:w`:保存当前文件。
- `:e filename`:打开文件filename进行编辑。
- `:x`:保存当前文件并退出。
- `:q`:退出vi。
- `:q!`:不保存文件并退出vi。
- `:!command`:执行shell命令command。
- `:n1,n2 w!command`:将文件中n1行至n2行的内容作为command的输入并执行之。
- `:r!command`:将命令command的输出结果放到当前行。
9. **寄存器操作**:
- `"?nyy`:将当前行及其下n行的内容保存到寄存器?中。
- `"?nyw`:将当前行及其下n个单词保存到寄存器?中。
- `"?nyl`:将当前行及其下n个字符保存到寄存器?中。
- `"?p`:取出寄存器?中的内容并放到光标位置处。
以上是vi编辑器的基本操作,掌握这些命令可以让你在Linux环境中更高效地编辑文本文件。随着熟练度的提高,你可以通过组合使用这些命令来完成更复杂的文本处理任务。vi还支持许多高级功能,如宏定义、块操作等,对于高级用户来说,vi是一个非常强大的工具。