39、Vile与Vi/Vim编辑器使用指南

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 -
  1. 切换到解压后的目录并运行配置程序:
$ cd vile-*; ./configure
  1. 运行 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. 参考官方文档和在线教程,不断学习和探索新的功能。

通过不断实践和积累经验,你将能够熟练运用这些编辑器,提升自己的文本编辑能力。希望本文能为你在使用这些编辑器的过程中提供帮助,让你更加高效地完成各种文本编辑任务。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值