你如何从Vim中的'gf'返回


187

我将Vim用于以Unix模式安装的Windows。由于有了这个站点,我现在使用gf命令转到光标下方的文件。

我正在寻找命令之一:

  1. 返回上一个文件(类似于ctags的Ctrl+ T),或者
  2. 重新映射gf 以在新窗口中自动启动新文件。

Answers:


294

我用Ctrl-O


43
CTRL-O转到跳转列表中的较旧位置,<Tab>或CTRL-I转到较新的位置。
塞巴斯蒂安RoccaSerra

4
@ g33kz0r的助记符为O = OUT,I = IN => Ctrl-O带您离开,Ctrl带您进入。如果每次跳跃都像穿过一扇门,那就是。
kronn

CTRL-O会跳到上次访问的位置,当搜索到新文件时,这很烦人。我更喜欢Shift-Ctrl-6(在我的情况下Ctrl-6不起作用)
Adriano


47

您可能要使用CTRL-W gf它在新选项卡中打开文件。

您可以像往常一样使用:bd,或使用CTRL-6更改缓冲区的其他常用方法来关闭新打开的文件。


7
标签对我来说比缓冲更方便,并且使用它nnoremap gf <C-W>gf来打开新标签可能会更好。
Searene

13

使用gf下降到文件中,然后使用:bf返回


1
我在选项卡中打开了两个窗口,这只是在第一个窗口中打开了第二个窗口,而不是跳回到上一个缓冲区。
肯尼·埃维特

12

只需使用:e#后跟Enter-基本上就是说要编辑最新(最新)文件。


9

Ctrl-Shift-6是一个。

:e#↲ 是另一个。


8
没有必要进行转移。别再滥用手指了。
Zathrus

6
嗯 我有点老套。Ctrl-6在几年前我在工作的Wyse终端上无法与vi一起使用。看,有些东西仍然刻蚀。而且,在此组合中不使用Shift几乎不会改变我的手指总滥用率。嘿,至少您已经尽力了。HTH。手。
tzot

这将切换到备用文件
jpaugh

5

我有CTRL-W f可以工作。
令人沮丧的是,我花了这么长时间完善这些命令的映射,才发现有内置版本。


5

我不知道您问题的第2部分的答案,但是我可以为第1部分提供帮助。

:e#

Vim会维护一个正在编辑的文件(缓冲区)列表。如果您输入

:buffers

它将列出您当前正在编辑的所有文件。该列表中带有%的文件是当前文件。旁边带有#的是备用文件。:e#将在当前文件和备用文件之间切换。我将F2映射到:e#而不是输入太多内容,因此可以轻松地在当前文件和备用文件之间切换。我通过将命令添加到.vimrc将其映射到F2

nmap `<F2> :e#<CR>`

2
我不认为您想使用:e#,因为那样可能会重新加载文件。:b#所做的等效操作而不会出现此问题。
兰巴克2011年

好点子。那将切换到另一个缓冲区,而无需重新加载它。
codebunny 2011年


2

当您打开新文件(使用gf:n或其他命令)时,旧文件仍保留在缓冲区列表中。您可以使用:ls列出打开的文件

如果要在vim中的缓冲区之间轻松导航,可以创建如下映射:

nmap <M-LEFT> :bN<cr>
nmap <M-RIGHT> :bn<cr>

现在,您可以使用Alt +左​​箭头或Alt +右箭头在缓冲区之间切换。

有关映射的完整文档在这里:

:help map.txt

0

我没有看过您的gf命令,但我想它使用了:e:find命令。
假设这是正确的,只需更换:电子:发现新的(或:V新垂直分割),文件将在一个新的窗口,而不是同一个打开。

例如

“在标题和cpp之间切换
nmap,s:查找%:t:r.cpp <CR>
nmap,S:新%:t:r.cpp <CR>
nmap,h:查找%:t:rh <CR>
nmap,H:新%:t:rh <CR>
nmap,F:new = expand(“ <cfile>:t”)<CR> <CR>
nmap,d:new = expand(“ <cfile>”)<CR> <CR> 


2
gf是内置的。它属于我们所有人。:-)
jpaugh
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.