在gf之类的光标下打开文件名,但在新标签页中(或拆分)?


43

普通模式命令gf转到具有光标当前所在路径的文件。

但这是在当前窗口中执行的,以替换当前文本。这意味着您需要明确地向后导航以稍后返回,并且可能需要在当前缓冲区中写入更改。

我确定可以通过在新的tabview中的光标下打开文件来代替吗?


3
启用'hidden'选项(set hidden)可使您远离未保存的缓冲区。对我来说,这是极大的生产力提升,对于停止如此依赖拆分和制表符至关重要。
tommcdo

Answers:


56

编辑:建议为垂直拆分情况很好地对称映射,因为Vim默认情况下有两个针对水平拆分情况的映射。

有多种方法可以编辑“光标下的文件”,并且您当然可以gf像@ alexander-myshov所提到的那样在新标签页中重新映射以进行编辑,这意味着您有两种方法可以在新标签页中对其进行编辑,在当前窗口中进行编辑,有时您可能还想这样做。使用标准映射并不难,但是如果您想将其中之一重新映射到gf,我建议您切换这些映射,以免丢失其中之一。

在光标下编辑文件名的一些方法是

  • gf -在同一窗口中的光标下编辑现有文件
  • C-Wf -在分割窗口中的光标下编辑现有文件
  • C-WC-F -在分割窗口中的光标下编辑现有文件
  • C-Wgf -在新标签页的光标下编辑现有文件

没有用于垂直分割光标下的现有文件的标准映射,但是可以通过先垂直分割窗口然后在当前窗口中的光标下编辑文件来实现。

  • C-Wv+ gf-在垂直分割的窗口中的光标下编辑现有文件

如您在上面看到的,在水平分割中,有两个默认的映射用于在光标下方编辑文件。因此,您可以将其中之一重新映射到上面的键串,从而扩展映射组以覆盖垂直拆分大小写。您当然可以绑定任何东西,但这似乎很好地完成了对称性:nnoremap <C-W><C-F> <C-W>vgf。现在你有

  • gf -在同一窗口中的光标下编辑现有文件
  • C-Wf -在分割窗口中的光标下编辑现有文件
  • C-WC-F -在垂直分割的窗口中的光标下编辑现有文件
  • C-Wgf -在新标签页的光标下编辑现有文件

如果光标下的文件名后面带有行号,则也可以转到文件中的特定行。如果你有

filename:10

您可以编辑文件,并使用将光标移至第10行gF。等效的是真正C-WF的分裂,C-WgF对于一个标签页。在这里,完成垂直分割的对称性并不是那么简单,但是我建议C-WC-S-F使用nnoremap <C-W><C-S-F> <C-W>vgF,从默认映射中模仿FShift+ f作为候选者获得的映射。

:是一个示例,您可以使用任何不是文件名字符的字符(请参阅参考资料:h 'isfname')。


所有这些命令都附带有苹果酱,例如

  • 扩展通配符
  • 根据您的'path'选择在比当前目录更多的位置查找
  • 根据您的'suffixesadd'选择,在文件名中添加文件扩展名
  • 否则,根据您的'includeexpr'选择,修改给定的filname以找到匹配项

:help gf有关这些各种选项的详细信息,请参阅和帮助主题。


如果光标下的文件名命名了一个不存在的文件,则最好将标准编辑命令与一起使用<cfile>,例如

:edit <cfile> // edit non-existent file under cursor in current window
:split <cfile> // edit non-existent file under cursor in split window
:vsplit <cfile> // edit non-existent file under cursor in vertical split window
:tabe <cfile> // edit non-existent file under cursor in new tabpage

当然,借助这些功能,您可以使用:spl+10 filename将光标移至特定行或:tabe+/cologne filename将光标移至图案的第一个匹配项之类的功能。


+1最佳注释,带有清晰的说明,远胜于将文档分为多个主题的内容。
Loves Probability

8

只需为此使用绑定:

在新窗口中打开(拆分):

nnoremap gf <C-W>f
vnoremap gf <C-W>f

在新标签页中打开:

nnoremap gf <C-W>gf
vnoremap gf <C-W>gf

还要检查一下: :help CTRL-W_gf


这些绝对对您有用吗?Vim似乎不希望我重新映射gf到其他内容。甚至nnoremap gf :echo "hello"<CR> 仍然在新缓冲区中的光标下打开文件(是的,我来自vimrc)。
tandrewnichols's

啊,没关系-我有一个插件在干扰。
tandrewnichols's
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.