Vile与Vi/Vim编辑器使用指南
1. Vile编辑器的主要特性
Vile编辑器具有诸多实用的功能,下面为你详细介绍。
1.1 设置特定模式
可以通过命令让Vile使用特定的主模式。例如,使用 :setl cmode 命令可将其设置为“c”模式,但该命令不会更新语法高亮显示。若要同时更新语法高亮,可使用宏 :set-h cmode ( set-highlighting )。
1.2 过程语言
Vile的过程语言与MicroEMACS的几乎相同。其语法规则如下:
- 注释以分号或双引号开头。
- 环境变量名(编辑器选项)以 $ 开头,用户变量名以 % 开头。
- 用于比较和测试条件的内置函数名均以 & 开头。
- 流控制命令和某些其他命令以 ~ 开头。
- @ 后跟字符串会提示用户输入,并返回用户的答案。
以下是一个来自 macros.doc 文件的示例,展示了该语言的特点:
~if &sequal %curplace "timespace vortex"
insert-string "First, rematerialize\n"
~endif
~if &sequal %planet "earth" ;If we have landed on earth...
~if &sequal %time "late 20th century" ;and we are then
write-message "Contact U.N.I.T."
~else
insert-string "Investigate the situation....\n"
insert-string "(SAY 'stay here Sara')\n"
~endif
~elseif &sequal %planet "luna" ;If we have landed on our neighbor...
write-message "Keep the door closed"
~else
setv %conditions @"Atmosphere conditions outside? "
~if &sequal %conditions "safe"
insert-string &cat "Go outside......" "\n"
insert-string "lock the door\n"
~else
insert-string "Dematerialize..try somewhen else"
newline
~endif
~endif
你可以将这些过程存储到编号宏中,或为它们命名并绑定到按键上。上述过程在使用Tardis Vile端口时非常有用。
另外,Paul Fox的一个更实用的示例,用于在所有C源文件中搜索光标下的单词,并将结果放入以该单词命名的缓冲区中,同时设置内置错误查找器( ^X ^X )使用此输出作为要访问的行列表,最后将宏绑定到 ^A g :
14 store-macro
set-variable %grepfor $identifier
edit-file &cat "!egrep -n " &cat %grepfor " *.[ch]"
~force rename-buffer %grepfor
error-buffer $cbufname
~endm
bind-key execute-macro-14 ^A-g
用户定义的过程可以有参数,类似于Bourne shell,但参数可以限制为特定的数据类型。不过,这些过程与内置命令并非完全可互换,因为目前还没有机制让撤销功能将整个宏视为一个单一操作。此外,还可以将 read-hook 和 write-hook 变量设置为过程名,分别在读取文件后和写入文件前运行,这类似于elvis中的预操作和后操作文件,以及Vim中的自动命令功能。
1.3 其他小功能
- 管道输入 :若将Vile作为管道中的最后一个命令,它将创建一个名为
[Standard Input]的缓冲区并为你编辑该缓冲区,可视为“终极分页器”。 - 编辑Windows文件 :将
dos选项设置为true时,Vile在读取文件时会去除行尾的回车符,写入时再将其写回,便于在Unix或GNU/Linux系统上编辑Windows文件。 - 文本重新格式化 :使用
^A f命令可对选定文本进行重新格式化和单词换行,它能识别C和shell注释(以*或#开头的行)以及引用的电子邮件(以>开头),类似于Unix的fmt命令,但速度更快。 - 格式化信息行 :
modeline-format变量是一个字符串,用于控制Vile格式化状态行的方式。状态行位于每个窗口的底部,用于描述缓冲区的状态,如名称、当前主模式、修改状态、插入模式与命令模式等。该字符串由printf(3)风格的百分号序列组成,例如%b表示缓冲区名称,%m表示主模式,若设置了ruler,%l表示行号。字符串中不属于格式说明符的字符将按原样输出。
2. Vile的获取与编译
Vile的官方网站是 http://invisible-island.net/vile/vile.html ,FTP地址为 ftp://invisible-island.net/vile/vile.tar.gz , vile.tar.gz 文件始终是指向当前版本的符号链接。
Vile使用ANSI C编写,可在Unix、OpenVMS、MS-DOS、Win32控制台和Win32 GUI、BeOS、QNX和OS/2等系统上构建和运行。编译Vile的步骤如下:
1. 通过FTP或从网页获取发行版。
2. 解压并解包文件:
$ gzip -d < vile.tar.gz | tar -xvpf -
- 切换到解压后的目录并运行配置程序:
$ cd vile-*; ./configure
- 运行
make进行编译:
$ make
编译完成后,使用 make install 进行安装。若希望语法着色功能正常工作,可在运行 configure 时添加 --with-builtin-filters 选项。建议使用版本为2.54a或更新的 flex ,因为Unix版本的 lex 工具性能不佳,且 configure 脚本不接受过旧版本的 flex 。
若在使用Vile时遇到错误或问题,可发送电子邮件至 vile@nongnu.org 进行反馈,必要时可直接联系Thomas Dickey,邮箱为 dickey@invisible-island.net 。
3. Vi、ex和Vim编辑器概述
Vi、ex和Vim编辑器是常用的文本编辑器,下面为你介绍它们的相关信息。
3.1 命令行语法
启动Vi会话最常见的三种方式如下:
- vi [options] file :打开文件进行编辑。
- vi [options] +num file :打开文件并定位到指定行。
- vi [options] +/pattern file :打开文件并定位到第一个匹配模式的行。
若未指定文件,Vi将打开一个空缓冲区。
3.2 命令行选项
Vi和ex是同一个程序,共享部分选项,但有些选项仅适用于某个版本,Vim特定的选项会有相应标记:
| 选项 | 描述 |
| — | — |
| +[ num ] | 从指定行开始编辑,若省略 num 则从文件最后一行开始。 |
| +/pattern | 从第一个匹配模式的行开始编辑。(对于ex,若在 .exrc 启动文件中设置了 nowrapscan ,则此操作会失败,因为ex从文件最后一行开始编辑。) |
| +?pattern | 从最后一个匹配模式的行开始编辑。 |
| -b | 以二进制模式编辑文件。(Vim) |
| -c command | 启动时运行指定的ex命令,Vi只允许一个 -c 选项,Vim最多接受10个。旧形式的选项 +command 仍然支持。 |
| --cmd command | 与 -c 类似,但在读取任何资源文件之前执行命令。(Vim) |
| -C | Solaris Vi:与 -x 相同,但假设文件已加密。Vim:以Vi兼容模式启动编辑器。 |
| -d | 以差异模式运行,类似于 vimdiff 。(Vim) |
| -D | 用于脚本调试模式。(Vim) |
| -e | 以ex模式运行(行编辑而非全屏模式)。 |
| -h | 打印帮助信息后退出。(Vim) |
| -i file | 使用指定文件而非默认的 ~/.viminfo 来保存或恢复Vim的状态。(Vim) |
| -l | 进入Lisp模式以运行Lisp程序(并非所有版本都支持)。 |
| -L | 列出因编辑会话中断或系统崩溃而保存的文件(并非所有版本都支持)。对于Vim,此选项与 -r 相同。 |
| -m | 以禁止写入选项启动编辑器,用户无法写入文件。(Vim) |
| -M | 不允许修改文件中的文本。(Vim) |
| -n | 不使用交换文件,仅在内存中记录更改。(Vim) |
| --noplugin | 不加载任何插件。(Vim) |
| -N | 以非Vi兼容模式运行Vim。(Vim) |
| -o[num] | 以指定数量的窗口启动Vim,默认情况下为每个文件打开一个窗口。(Vim) |
| -O[num] | 以指定数量的水平排列窗口(垂直分割)启动Vim。(Vim) |
| -r [file] | 恢复模式,在编辑会话中断或系统崩溃后恢复并继续编辑文件。若未指定文件,则列出可恢复的文件。 |
| -R | 以只读模式编辑文件。 |
| -s | 静默模式,不显示提示信息,在运行脚本时很有用。此行为也可通过旧的 - 选项设置。对于Vim,仅在与 -e 一起使用时有效。 |
| -s scriptfile | 读取并执行指定脚本文件中的命令,就像从键盘输入一样。(Vim) |
| -S commandfile | 在加载命令行指定的编辑文件后,读取并执行命令文件中的命令,是 vim -c 'source commandfile' 的简写。(Vim) |
| -t tag | 编辑包含标签的文件,并将光标定位到其定义处。 |
| -T type | 设置终端类型选项,此值将覆盖 $TERM 环境变量。(Vim) |
| -u file | 从指定的资源文件而非默认的 .vimrc 资源文件读取配置信息。若文件参数为 NONE ,Vim将不读取任何资源文件、不加载任何插件,并以兼容模式运行。若参数为 NORC ,则不读取任何资源文件,但会加载插件。(Vim) |
| -v | 以全屏模式运行(Vi的默认模式)。 |
| --version | 打印版本信息后退出。(Vim) |
| -V[num] | 详细模式,打印有关正在设置的选项以及正在读取或写入的文件的消息。可设置详细程度以增加或减少接收的消息数量,默认值为10表示高详细程度。(Vim) |
| -w rows | 设置窗口大小,每次显示指定行数,在通过慢速拨号线路(或长途互联网连接)进行编辑时很有用。旧版本的Vi不允许选项与其参数之间有空格,Vim不支持此选项。 |
| -W scriptfile | 将当前会话中输入的所有命令写入指定的脚本文件,创建的文件可与 -s 命令一起使用。(Vim) |
| -x | 提示输入一个密钥,用于尝试使用 crypt 加密或解密文件(并非所有版本都支持)。 |
| -y | 无模式Vi,仅以插入模式运行Vim,无命令模式,等同于以 evim 方式调用Vim。(Vim) |
| -Z | 以受限模式启动Vim,不允许执行shell命令或暂停编辑器。(Vim) |
虽然大多数人仅在Vi中使用ex命令,但ex本身也是一个独立的程序,可从shell调用。在ex中,可输入 vi 或 visual 命令启动Vi;在Vi中,可输入 Q 退出Vi并进入ex。退出ex有几种方式:
- :x :退出(保存更改并退出)。
- :q! :不保存更改直接退出。
- :vi :进入Vi编辑器。
4. Vi操作回顾
Vi有多种操作模式和命令语法,下面为你详细介绍。
4.1 Vi模式
- 命令模式 :打开文件后即进入命令模式,在此模式下可执行以下操作:
- 调用插入模式。
- 发出编辑命令。
- 将光标移动到文件中的不同位置。
- 调用ex命令。
- 调用Unix shell。
- 保存当前文件版本。
- 退出Vi。
- 插入模式 :在插入模式下可在文件中输入新文本,通常使用
i命令进入插入模式,按ESC键退出插入模式并返回命令模式。
4.2 Vi命令语法
Vi中的编辑命令通常具有以下形式: [n] operator [m] motion 。基本编辑操作符包括:
- c :开始更改操作。
- d :开始删除操作。
- y :开始复制操作。
若当前行是操作对象, motion 与操作符相同,如 cc 、 dd 、 yy 。否则,编辑操作符作用于由光标移动命令或模式匹配命令指定的对象。 n 和 m 表示操作执行的次数或操作对象的数量,若同时指定 n 和 m ,效果为 n * m 。操作对象可以是以下文本块:
- word :包含直到空白字符(空格或制表符)或标点符号的字符,大写形式的对象仅识别空白字符。
- sentence :直到 . 、 ! 或 ? ,后跟两个空格。
- paragraph :直到下一个空行或由 para= 选项定义的段落宏。
- section :直到由 sect= 选项定义的下一个nroff/troff节标题。
- motion :直到由运动说明符指定的字符或其他文本对象,包括模式搜索。
以下是一些示例:
- 2cw :更改接下来的两个单词。
- d} :删除到下一个段落。
- d^ :删除到行首。
- 5yy :复制接下来的五行。
- y]] :复制到下一个节。
- cG :更改到编辑缓冲区的末尾。
4.3 视觉模式(仅Vim)
Vim提供了“视觉模式”,可用于突出显示文本块,这些文本块将成为删除或复制等编辑命令的操作对象。图形版本的Vim允许使用鼠标以类似方式突出显示文本。相关命令如下:
- v :以逐个字符的方式在视觉模式下选择文本。
- V :以逐行的方式在视觉模式下选择文本。
- CTRL-V :以块的方式在视觉模式下选择文本。
4.4 状态行命令
大多数命令在输入时不会在屏幕上回显,但屏幕底部的状态行用于编辑这些命令:
- / :向前搜索模式。
- ? :向后搜索模式。
- : :调用ex命令。
- ! :调用一个Unix命令,该命令以缓冲区中的一个对象作为输入,并将其替换为命令的输出。在 ! 后输入一个运动命令来描述应传递给Unix命令的内容,命令本身在状态行上输入。
在状态行上输入的命令必须按 ENTER 键确认。此外,错误消息和 CTRL-G 命令的输出也显示在状态行上。
5. Vi命令详解
Vi在命令模式下提供了大量单键命令,Vim还提供了额外的多键命令。下面为你介绍常见的Vi命令。
5.1 移动命令
部分Vi版本不识别扩展键盘键(如箭头键、Page Up、Page Down、Home、Insert和Delete),但所有版本都识别以下键。许多Vi用户更喜欢使用这些键,因为它们有助于将手指保持在键盘的主行上。命令前的数字表示重复移动的次数,移动命令也可在操作符后使用,操作符作用于移动经过的文本。
以下是不同类型的移动命令:
字符移动 :
| 按键 | 描述 |
| — | — |
| h 、 j 、 k 、 l | 左、下、上、右移动(←、↓、↑、→) |
| Spacebar | 右移 |
| BACKSPACE | 左移 |
| CTRL-H | 左移 |
文本移动 :
| 按键 | 描述 |
| — | — |
| w 、 b | 按“单词”向前、向后移动(字母、数字和下划线组成单词) |
| W 、 B | 按“WORD”向前、向后移动(仅空白字符分隔项) |
| e | 移动到单词末尾 |
| E | 移动到WORD末尾 |
| ge | 移动到上一个单词末尾(Vim) |
| gE | 移动到上一个WORD末尾(Vim) |
| ) 、 ( | 移动到下一个、当前句子的开头 |
| } 、 { | 移动到下一个、当前段落的开头 |
| ]] 、 [[ | 移动到下一个、当前节的开头 |
| ][ 、 [] | 移动到下一个、当前节的末尾(Vim) |
行移动 :
文件中的长行在屏幕上可能显示为多行,大多数命令作用于文件中定义的行,但少数命令作用于屏幕上显示的行。Vim的 wrap 选项可控制长行的显示方式。
| 按键 | 描述 |
| — | — |
| 0 、 $ | 移动到当前行的第一个、最后一个位置 |
| ^ 、 _ | 移动到当前行的第一个非空白字符 |
| + 、 - | 移动到下一个、上一个行的第一个非空白字符 |
| ENTER | 移动到下一行的第一个非空白字符 |
| num | | 移动到当前行的第 num 列 |
| g0 、 g$ | 移动到屏幕行的第一个、最后一个位置(Vim) |
| g^ | 移动到屏幕行的第一个非空白字符(Vim) |
| gm | 移动到屏幕行的中间(Vim) |
| gk 、 gj | 向上、向下移动一个屏幕行(Vim) |
| H | 移动到屏幕的顶行(Home位置) |
| M | 移动到屏幕的中间行 |
| L | 移动到屏幕的最后一行 |
| num H | 移动到屏幕顶行后的第 num 行 |
| num L | 移动到屏幕最后一行前的第 num 行 |
屏幕移动 :
| 按键 | 描述 |
| — | — |
| CTRL-F 、 CTRL-B | 向前、向后滚动一屏 |
| CTRL-D 、 CTRL-U | 向下、向上滚动半屏 |
| CTRL-E 、 CTRL-Y | 在屏幕底部、顶部显示多一行 |
| z ENTER | 将光标所在行重新定位到屏幕顶部 |
| z. | 将光标所在行重新定位到屏幕中间 |
| z- | 将光标所在行重新定位到屏幕底部 |
| CTRL-L | 重绘屏幕(不滚动) |
| CTRL-R | Vi:重绘屏幕(不滚动);Vim:重做最后一次撤销的更改 |
搜索命令 :
| 按键 | 描述 |
| — | — |
| / pattern | 向前搜索模式,按 ENTER 结束 |
| / pattern /+ num | 向前搜索模式,找到后移动到模式后的第 num 行 |
| / pattern /- num | 向前搜索模式,找到后移动到模式前的第 num 行 |
| ? pattern | 向后搜索模式,按 ENTER 结束 |
| ? pattern ?+ num | 向后搜索模式,找到后移动到模式后的第 num 行 |
| ? pattern ?- num | 向后搜索模式,找到后移动到模式前的第 num 行 |
| :noh | 暂停搜索高亮显示,直到下一次搜索(Vim) |
| n | 重复上一次搜索 |
通过掌握这些Vile、Vi、ex和Vim编辑器的特性和命令,你可以更高效地进行文本编辑工作。不同的编辑器和模式各有特点,可根据实际需求灵活运用。
6. 插入命令与修改删除文本
6.1 插入命令
进入插入模式的命令有很多,以下是完整的插入命令列表:
| 命令 | 描述 |
| — | — |
| i | 在光标前插入文本 |
| I | 在当前行的第一个非空白字符前插入文本 |
| a | 在光标后插入文本 |
| A | 在当前行的末尾插入文本 |
| o | 在当前行下方打开新行并插入文本 |
| O | 在当前行上方打开新行并插入文本 |
| s | 删除当前字符并插入文本 |
| S | 删除当前行并插入文本 |
6.2 修改和删除文本
结合前面提到的编辑命令语法 [n] operator [m] motion ,可以完成各种修改和删除文本的操作。下面详细介绍常见的修改和删除操作:
修改文本 :
- cw :更改当前单词,会删除当前单词并进入插入模式。
- ciw :在Vim中, ciw 也用于更改当前单词, i 表示内部(inside),即只操作单词内部内容。
- c$ :更改从光标位置到行末的内容。
- cG :更改从当前位置到编辑缓冲区末尾的内容。
删除文本 :
- dd :删除当前行。
- dw :删除一个单词。
- d$ :删除从光标位置到行末的内容。
- dG :删除从当前行到编辑缓冲区末尾的所有行。
以下是一个简单的mermaid流程图,展示了修改和删除文本的基本流程:
graph TD;
A[开始] --> B[选择操作符 c 或 d];
B --> C{是否指定次数 n};
C -- 是 --> D[指定次数];
C -- 否 --> E[默认次数 1];
D --> F[选择运动命令];
E --> F;
F --> G{执行操作};
G -- 修改 --> H[进入插入模式修改文本];
G -- 删除 --> I[删除指定文本];
H --> J[结束];
I --> J;
7. 复制、粘贴与撤销操作
7.1 复制操作
在Vi中,使用 y 操作符进行复制(yank)。例如:
- yy :复制当前行。
- 5yy :复制接下来的五行。
- yw :复制一个单词。
- y$ :复制从光标位置到行末的内容。
7.2 粘贴操作
复制的内容可以使用 p 或 P 命令进行粘贴:
- p :在光标后粘贴内容。如果复制的是行,则粘贴到当前行的下一行;如果复制的是字符,则粘贴到光标后。
- P :在光标前粘贴内容。如果复制的是行,则粘贴到当前行的上一行;如果复制的是字符,则粘贴到光标前。
7.3 撤销与重做操作
-
u:撤销上一次操作。可以多次使用u来逐步撤销之前的操作。 -
CTRL-R(在Vim中):重做最后一次撤销的更改。
8. ex命令基础
ex命令是Vi编辑器中以冒号 : 开头的命令,它提供了强大的行编辑功能。以下是一些基本的ex命令:
8.1 文件操作
-
:w:保存当前文件。 -
:w filename:将当前缓冲区内容保存到指定文件。 -
:q:退出编辑器,如果文件有修改且未保存,会提示错误。 -
:q!:强制退出编辑器,不保存修改。 -
:wq:保存文件并退出编辑器。
8.2 行操作
-
:n:跳转到第n行。 -
:$:跳转到文件最后一行。 -
:1:跳转到文件第一行。 -
:n,m d:删除从第n行到第m行的内容。 -
:n,m co p:将从第n行到第m行的内容复制到第p行之后。 -
:n,m m p:将从第n行到第m行的内容移动到第p行之后。
8.3 替换操作
-
:s/pattern/replacement/:将当前行中第一个匹配pattern的内容替换为replacement。 -
:s/pattern/replacement/g:将当前行中所有匹配pattern的内容替换为replacement。 -
:%s/pattern/replacement/g:将整个文件中所有匹配pattern的内容替换为replacement。 -
:%s/pattern/replacement/gc:将整个文件中所有匹配pattern的内容替换为replacement,替换前会提示确认。
9. ex命令总结
以下是按字母顺序总结的一些常见ex命令:
| 命令 | 描述 |
| — | — |
| :ab | 定义缩写词 |
| :cd | 更改当前工作目录 |
| :g/pattern/cmd | 对所有匹配 pattern 的行执行 cmd 命令 |
| :help | 显示帮助信息 |
| :map | 定义按键映射 |
| :set | 设置编辑器选项 |
| :source | 执行指定文件中的ex命令 |
| :unmap | 取消按键映射 |
10. 总结与建议
Vile、Vi、ex和Vim编辑器都具有各自独特的功能和特点。Vile的过程语言提供了强大的可编程性,适合需要自定义编辑操作的用户;Vi和Vim则以其高效的编辑模式和丰富的命令集,成为众多开发者和系统管理员的首选文本编辑器。
在使用这些编辑器时,建议你:
1. 逐步熟悉各种命令和操作,从简单的命令开始,逐渐掌握复杂的功能。
2. 结合实际需求,自定义快捷键和宏,提高编辑效率。
3. 定期备份重要文件,避免因意外情况导致数据丢失。
4. 参考官方文档和在线教程,不断学习和探索新的功能。
通过不断实践和积累经验,你将能够熟练运用这些编辑器,提升自己的文本编辑能力。希望本文能为你在使用这些编辑器的过程中提供帮助,让你更加高效地完成各种文本编辑任务。
超级会员免费看
9

被折叠的 条评论
为什么被折叠?



