Vim 文件名补全相对于当前文件

kzh*_*kzh 10 vim path

Vim 中,当我处于插入模式并且我想使用文件名补全时,我希望搜索路径相对于当前文件,而不是当前工作目录。例如,如果在插入模式下,我键入以下内容:

./^X^F

完成菜单向我显示了 中的文件:pwd,但我宁愿看到%:p:h列出的文件。

有没有我可以设置的选项来解决这个问题,如果没有,你有什么建议作为解决方法?

Ing*_*kat 13

如果你

:set autochdir
Run Code Online (Sandbox Code Playgroud)

你会得到你想要的行为。但是,如果您需要保留工作目录(例如,轻松打开其他项目文件),则必须使用 autocmds 保存/恢复 CWD:

:autocmd InsertEnter * let save_cwd = getcwd() | set autochdir
:autocmd InsertLeave * set noautochdir | execute 'cd' fnameescape(save_cwd)
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!`autochdir` 非常适合 `CX`、`CF`,但是当我在一个项目中深入 4 层并且我想要 `:tabe` 时很烦人 (2认同)

kzh*_*kzh 5

@ Ingo Karkat回答很好,但我有点犹豫是否将其放入我的 vimrc 中,因为即使是帮助页面也'autochdir'给出了说明,它的使用会破坏一些插件。

我提出了自己的解决方案,这对我的用例来说可能非常小众:

inoremap ./ <CX><CF> <CO> :lcd %:p:h <CR> <CX><CF>

我计划在发出 lcs 命令之前将其提取到一个函数中并为 pwd 设置一个变量,然后在某个时间点重置它。如果有菜单 autocmd 就好了。

我可能会也可能不会使用它,但我想我会抛出另一个解决方案。