一份关于 Neovim/Vim 中文件跳转和导航操作的详细指南,包含文件切换、快速打开、路径补全等实用技巧。

vim 跳转相关操作

快速打开或切换当前目录中的指定文件

  1. 直接在命令模式下打开
  • :e filename:直接在当前 Vim 实例中打开指定文件 filename
    • 例如,:e config.json 会打开当前目录下的 config.json 文件。
  1. 利用路径补全
  • 输入 :e 后按下 Tab 键:Vim 会自动补全当前目录下的文件名,你只需要输入部分文件名,然后按下 Tab 键即可。

[!tips] :eedit 的缩写,主要用于打开或编辑文件。

:e 命令的基本用法

  • 打开新文件:
:e newfile.txt

这会打开一个新的 buffer,并加载 newfile.txt 文件内容到 buffer 中(如果文件存在

  • 切换到已打开的文件:
:e %

这个命令会切换到当前窗口中打开的另一个文件。

  • 重新加载当前文件:
:e!

这个命令会丢弃当前缓冲区中的所有修改,并重新加载文件。

  • 指定行号打开:
:e +10 filename.txt

这会打开 filename.txt 文件,并把光标定位在第 10 行。

  • 指定搜索内容打开:
:e +/pattern filename.txt

这会打开 filename.txt 文件,并把光标定位在第一个匹配 pattern 的行。

  • 打开远程文件:
:e scp://user@host/path/to/file

这会通过 SCP 协议打开远程服务器上的文件。

  • 打开多个文件:
:args file1.txt file2.txt file3.txt

这会将多个文件添加到 ARG 列表中,然后你可以使用 :bn:bp 在这些文件之间切换。

:e 命令与其他命令结合使用

  • :args:列出所有打开的文件。
  • :bn:打开下一个文件。
  • :bp:打开上一个文件。
  • :bw:关闭当前窗口。
  • :tabnew:在新标签页中打开文件。
  • :vsplit:垂直分割窗口。
  • :split:水平分割窗口。

在已打开的文件间(窗口)切换:

[!tips]

  • :split → 创建分屏 (:vsplit创建垂直分屏)
  • <C-w><dir>: dir就是方向,可以是 hjkl 或是 ←↓↑→ 中的一个来切换分屏。
  • <C-w>_ (或 <C-w>|) : 最大化尺寸 (<C-w>| 垂直分屏)
  • <C-w>+ (或 <C-w>-) : 增加尺寸
  • Ctrl+w + w: 在所有打开的窗口之间循环切换。

  • Ctrl+w + h: 切换到左边窗口。

  • Ctrl+w + j: 切换到下边窗口。

  • Ctrl+w + k: 切换到上边窗口。

  • Ctrl+w + l: 切换到右边窗口。

  • 在已打开的文件间切换:

    • :bn:打开下一个文件。
    • :bp:打开上一个文件。
    • :ls:列出所有打开的文件,并显示对应的编号。然后使用 :b number 跳转至指定编号的文件。

举个例子:

如果你打开了三个文件,分别在三个窗口中显示,你可以:

  1. 使用 Ctrl+w w 不断在三个窗口之间切换。
  2. 使用 :ls 查看所有打开的文件,然后使用 :b 2 跳转到第二个文件。

在当前编辑文件中跳转

  • 跳转到指定行:

    • :行号:直接跳转到指定行,例如 :10 跳转到第 10 行。
    • nG:跳转到第 n 行(n 为行号)。
    • gg:跳转到文件开头。
    • G:跳转到文件末尾。
  • 在当前行上移动光标: ![[../Illustrations/Pasted image 20250116131731.png]]

    • 0:跳转到行首。
    • ^:跳转到行首第一个非空字符。
    • $:跳转到行尾。
    • g_ : 到本行最后一个不是blank字符的位置。
    • fx:跳转到当前行第一个 x 字符(x 为任意字符非单个,例如’function’)等于 1fx
      • ffunction → 跳转到当前行的第一个 “function” 字符
      • 4fi → 到当前行第四个出现的 i 。
    • Fx:跳转到当前行最后一个 x 字符。
    • tx:跳转到当前行第一个 x 字符之前
      • dt 组合使用, 其他的命令也可,例如 y
        • dt" → 删除所有的内容,直到遇到双引号 "
    • Tx:跳转到当前行最后一个 x 字符之后
  • 跳转到匹配的字符:

    • /pattern:向下搜索 pattern。
    • ?pattern:向上搜索 pattern。
    • n:重复上一次搜索。
    • N:反向重复上一次搜索。
  • 跳转到匹配的括号:

    • %:跳转到匹配的括号(如 (){}[])。
  • 跳转到标记:

    • ma:在当前位置设置标记 a。
    • 'a:跳转到标记 a 的位置。
  • 快速跳转到文件开头或末尾:

    • H:跳转到窗口顶部。
    • L:跳转到窗口底部。
    • M:跳转到窗口中间。
  • z 操作符

    • zz / z.: 将当前行移动到屏幕中间,使当光标保持在当前行

    • zt: 将当前行移到窗口顶部

    • zb / z-: 将当前行移到窗口底部

    • zf: 将当前行折叠成一个折叠。

    • zo: 打开一个折叠。

    • zc: 关闭一个折叠。

    • za: 交替打开或关闭一个折叠。

  • 使用搜索和替换进行跳转:

    • :%s/old/new/gc:全局搜索并替换,每次替换前询问确认。

示例

  • 打开一个新的垂直分割窗口,编辑 test.txt 文件: :vsplit test.txt
  • 跳转到当前文件的第 20 行: :20
  • 跳转到当前行的第一个 “function” 字符: ffunction
  • 在所有文件中搜索 “error” 并替换为 “warning”: :%s/error/warning/g
  • 在当前文件设置一个标记 a,然后跳转到该标记: ma, 'a

Other vim operates