1. 注册宏

1. 注册宏

我通常使用 VIM,但必须在 VI 中摆弄文件。我记得 Solaris 2.5 上的 vi 是否有重复使用命令的历史?有时重新输入完​​整的行是很痛苦的。在 VIM 中我可以按 ESC、ESC、向上箭头。

答案1

不,不幸的是,SVR4 版本中没有历史记录支持vi

请注意,它不是vi版本 4,而是“Version SVR4.0,Solaris 2.5.0”。该版本字符串是硬编码的,即使在最近的版本中也会报告(Solaris 2.5 大约有 18 年历史)。

从 Solaris 11 开始,vim与操作系统捆绑在一起。

答案2

如果这足以满足您的需要,可以将击键vi作为宏重播。这可以通过两种方式完成。

在这两种情况下,我都会先介绍相似的内容,vim然后区分vi

1. 注册宏

这些都是以交互方式捕获和重放的。

1.1 vim

回想一下,在 中vim,宏是通过在记录模式(从命令模式到达)下将一系列击键记录到寄存器来创建的。然后通过执行寄存器的内容来执行宏。

qa                # 1. Enter recording mode, will save to register "a.
  ihello<esc>     #    Type key strokes to insert string "hello".
             q    #    Return to command mode.

@a                # 2. Execute contents of register "a (insert "hello").

@@                # 3. Repeat last macro execution (insert "hello").

正如所提出的问题,这些步骤不会在 中使用vim,而是使用应用程序的命令历史记录。

1.2 六

在 中vi,上面的步骤 1 以不同的方式执行:宏内容必须以插入模式输入到缓冲区中,然后拉入/复制/等到寄存器中。

i                            # 1a. Enter insert mode.
 ihello<ctrl-v><esc>         #     Type key strokes to insert string "hello", escaping necessary keys.
                    <esc>    #     Return to command mode.

"aY                          # 1b. Yank entire line to register "a (macro text should appear on a line by itself).

@a                           # 2. Execute contents of register "a (insert "hello").

@@                           # 3. Repeat last macro execution (insert "hello").

2. 按键映射

这些可以交互地捕获或在适当的*rc文件中捕获。

执行映射时,vimvi都会等待 1 秒(默认)以接受构成映射单词的所有击键。

2.1 vim

:cmap lhs rhs<enter>    # Map rhs-words to lhs-word for command-mode mappings.
:imap lhs rhs<enter>    #                           for insert-mode mappings.
:map! lhs rhs<enter>    #                           for command- and insert-mode mappings.
:map  lhs rhs<enter>    #                           for normal-mode mappings.
:nmap lhs rhs<enter>    #                           for strict normal-mode mappings.
                        # Escape necessary keys in lhs and rhs.
                        # lhs "#n" means function key "n"
                        # Use vim's extensive symbolic key names.

:vmap                   # Other variants
:xmap
:smap
:omap
:lmap

:unmap lhs              # Remove map
:nunmap                 # Other variants
:vunmap
:xunmap
:sunmap
:ounmap
:unmap!
:iunmap
:lunmap
:cunmap

2.1.1 示例

利用 的符号键名,使q键写入并退出编辑器。vim

:nmap q :wq<CR><enter>     # <CR> is typed as 4 chars, <enter> as 1.

2.2 六

:map  lhs rhs<enter>    # Map rhs-words to lhs-word for command-mode mappings.
:map! lhs rhs<enter>    #                           for insert-mode mappings.
                        # Escape necessary keys in lhs and rhs.
                        # lhs "#n" means function key "n"

:unmap lhs              # Remove map

2.2.1 示例

使q键写入并退出编辑器。

:map q :wq<ctrl-v><enter><enter>

参考

  1. 文档vim,例如:这里
  2. 使用 Vi 显示编辑简介,由 的作者撰写vi,例如:这个PDF

相关内容