菜鸟科技网

vim命令历史如何高效查看与复用?

Vim 的历史记录主要分为以下几类:

vim命令历史如何高效查看与复用?-图1
(图片来源网络,侵删)
  1. 命令行历史:你输入过的 命令。
  2. 搜索模式历史:你输入过的 (向下搜索) 和 (向上搜索) 模式。
  3. 表达式寄存器:存储你输入过的 命令中的表达式。
  4. 输入行历史:在对话框或命令行中输入过的文本。

下面我们逐一详细讲解。


命令行历史

这是最常用到的历史记录,指的是你在普通模式下按 进入命令行模式后,输入过的所有命令。

如何访问和使用

  • 向上/向下翻查

    • 在命令行模式下,按 <Up> (↑) 或 <Ctrl-P> 可以向前(从旧到新)浏览历史命令。
    • <Down> (↓) 或 <Ctrl-N> 可以向后(从新到旧)浏览历史命令。
  • 自动补全

    vim命令历史如何高效查看与复用?-图2
    (图片来源网络,侵删)
    • 在输入命令的一部分后,按 <Tab> 键可以尝试自动补全命令,如果存在多个匹配项,可以连续按 <Tab> 在它们之间循环切换。
    • 示例:输入 b 然后按 <Tab>,可能会在 bdelete, bnext, bprevious 等之间切换。
  • 执行历史命令

    • 浏览到你想要的命令后,按 <Enter> 执行它。
    • 浏览过程中,按 <Esc> 可以取消当前输入,返回普通模式。

管理命令行历史

Vim 将这些历史记录存储在内存中,当你退出 Vim 时,默认情况下它们不会被保存,如果你想跨会话使用历史记录,需要进行配置。

  • 查看历史命令列表: 在命令行模式下输入 history,然后按 <Enter>,它会显示所有类型的历史记录(命令、搜索等),并带有一个编号。

     1  11s/foo/bar/g
     2  1,$s/foo/bar/g
     3  w
     4  %s/foo/bar/g
     5  /foo
     6  ?bar
     7  :history

    开头的行是命令历史。1 11s/foo/bar/g 表示第 1 条历史记录是 11s/foo/bar/g

    vim命令历史如何高效查看与复用?-图3
    (图片来源网络,侵删)
  • 执行特定编号的命令: 使用 history {num} 来查看某条记录的详细信息,然后使用 来执行最近一次的 命令。 更直接的方法是使用 {num} 来执行编号为 {num} 的命令。 3 会执行编号为 3 的命令,也就是 w

  • 保存历史记录到文件: 使用 history {cmd} > {filename} 可以将命令历史保存到文件。 history : > my_cmd_history.txt

  • 配置自动保存: 在你的 .vimrc 文件中添加以下配置,可以让 Vim 在退出时自动保存命令行和搜索历史到 viminfo 文件中。

    " 设置读取和写入 viminfo 文件
    set viminfo+=!
    " ! 表示保存全局变量(包括命令历史)
    " 也可以更精确地控制
    set viminfo='10,<50,s10,h  " 保存10个命令行历史,50行行首标记等

    默认情况下,Vim 会使用一个名为 viminfo 的文件来存储这些信息,文件路径可以通过 set viminfo? 查看。


搜索模式历史

这指的是你使用 (向前搜索) 和 (向后搜索) 时输入过的模式。

如何访问和使用

  • 访问 历史: 在普通模式下按 进入搜索模式后,按 <Up> (↑) 或 <Ctrl-P> 可以向前浏览你之前用 搜索过的模式。

  • 访问 历史: 在普通模式下按 进入搜索模式后,按 <Up> (↑) 或 <Ctrl-P> 可以向前浏览你之前用 搜索过的模式。

  • 自动补全: 和命令行类似,在输入搜索模式的一部分后,按 <Tab> 可以自动补全。

  • 在历史中切换

    • 历史和 历史是分开存储的。
    • 在 模式下,按 <Down> (↓) 或 <Ctrl-N> 会向后浏览(更近的搜索)。
    • <Esc> 可以取消搜索。

管理搜索模式历史

搜索模式历史也默认保存在 viminfo 文件中,所以配置 viminfo 的设置同样会影响它的持久化。

  • 查看搜索历史: 使用 history / 来查看所有 搜索历史。 使用 history ? 来查看所有 搜索历史。

  • 执行特定编号的搜索: 和命令历史类似,你可以先查看编号,然后使用 来执行最近一次的 搜索,或者直接使用 {num} 来执行编号对应的搜索命令。


表达式寄存器

这是一个稍微特殊但非常强大的“历史”,它存储了你上次在命令行中输入的表达式(即 命令中 后面的部分)。

如何访问和使用

  • 触发表达式输入: 在命令行模式下,输入 然后按 <Enter>,Vim 会进入一个小的输入窗口,让你输入一个表达式,计算后会替换掉 。

  • 访问表达式历史: 在输入 之后,窗口打开时,你可以使用 <Up> (↑) 和 <Down> (↓) 来浏览你之前输入过的所有表达式。

  • 执行表达式: 选择一个历史表达式后,按 <Enter> 会计算它,并将结果粘贴回原始的命令行中。

示例

  1. 在普通模式下,输入 echo <C-R>=<Up> (这里 <Up> 是为了演示,实际操作时你会看到历史)。
  2. 按下 <Enter> 后,会弹出一个窗口,里面是你上次输入的表达式。
  3. 你可以用 <Up>/<Down> 选择,然后按 <Enter> 确认,该表达式的结果会替换掉 ,最终执行类似 echo 123 的命令。

输入行历史

这个历史记录主要用于 Vim 的对话框或用户自定义的输入行,prompt 命令创建的输入环境,它的使用方法和命令行历史类似,用 <Up>/<Down> 浏览,但使用频率相对较低。


总结与最佳实践

历史类型 触发方式 浏览快捷键 持久化方式 主要用途
命令行历史 <Up>, <Down>, <Ctrl-P>, <Ctrl-N> viminfo 文件 快速重复执行 w, q, set 等命令
搜索模式历史 <Up>, <Down>, <Ctrl-P>, <Ctrl-N> viminfo 文件 快速重复搜索相同的字符串
表达式历史 (在命令行中) <Up>, <Down> viminfo 文件 快速重复使用复杂的计算表达式
输入行历史 prompt <Up>, <Down> viminfo 文件 在特定输入环境中重复输入

推荐的 .vimrc 配置

为了获得最佳体验,建议在你的 .vimrc 中添加以下配置:

" 启用 viminfo 文件,用于保存命令历史和搜索历史
" '10: 保存10个命令行历史
" <50: 保存50个行标记
" s10: 保存10个搜索模式
" h: 保存文件查找历史
set viminfo='10,<50,s10,h
" (可选) 指定 viminfo 文件的路径
" set viminfo+=n~/.vim/viminfo
" 让命令行历史更智能,忽略空命令和重复命令
" 需要较新版本的 Vim
" set history=1000 " 默认值,可以增大
" set wildmenu
" set wildmode=longest,list,full

实战技巧

  1. 快速修正上一个命令: 输入了一个错误的 命令并按了 <Enter>,不要慌!直接按 ,然后按 <Up> 找到上一个命令,用方向键移动光标修改即可。

  2. 模糊查找历史命令: 虽然没有直接的模糊搜索,但你可以利用命令补全,如果你记得命令的开头几个字母,输入后按 <Tab> 是一个非常高效的方法。

  3. 结合 和 : 如果你刚用 搜索过某个单词,想用 s 命令替换它,可以直接输入 s//new_word/g,这里的 会自动使用上一次的搜索模式,非常方便。

掌握 Vim 的历史记录功能,能极大地减少你的重复输入,让你更专注于文本本身,从而真正实现“编辑器之神”所承诺的流畅高效。

分享:
扫描分享到社交APP
上一篇
下一篇