我想转到我刚刚编辑的文件,然后再编辑类似MRU插件的文件。

:bnext:bprev有时可以工作,但更多时候我最终会遇到一些我不知道的文件忘记了编辑并被迫退回到MRU插件。

有没有办法修复它?在更多内容之间进行导航的最佳方法是什么?

我知道这可能很棘手,但我同意可以改善当前行为的任何方法。我经常看到的缓冲区完全不合适。也许有一个插件可以跟踪最近的文件并提供挂钩,以便我可以创建映射?我相信我想要的是能够按最新保存顺序浏览文件。这样一来,如果我返回历史记录,顺序将不会改变,直到我保存文件,然后保存到最后一个文件并向后一步“返回”之前保存的文件,即我从那里开始。

类似Ctrl-^ :bn对的东西可以立即切换文件,而不会在当前缓冲区中跳转。在:bp中有点像Ctrl-OCtrl-I

u   Change to recently-visited directory                 |netrw-u|
U   Change to subsequently-visited directory             |netrw-U|


评论

您所说的“我最近编辑的文件”在字面上是“我最近编辑的文件”吗?还是只表示您在Vim中可见的最后一个?

如果是后者,我个人只是将Ctrl-O(有时是Ctrl-T)混搭到我到达那里。

是的,我也是Ctrl-O和Ctrl-I。但是它会在编辑点之间跳转,从而中断了流程。我想按访问顺序在缓冲区之间来回移动。插件如何显示最新文件列表?他们在内部跟踪他们吗?

Ctrl- ^在最后两个文件之间交换。但是,在更多内容之间进行导航的最佳方法是什么?

通过访问,还不清楚您是指打开,写入,在有焦点的窗口中还是更改它们的顺序。 Ctrl-O / I是特定于窗口的固件,而MRU通常是全局的。如果您确实希望按最近访问的顺序排序,则一旦您跳回一次,列表的顺序就会改变,从而使事情更加复杂。

#1 楼

我编写了一个小函数来为我反复按下CTRL-O,直到缓冲区更改。

您可以在这里找到它。我将其映射到CTRL-U,但如果愿意,可以覆盖CTRL-O。

function! GoBackToRecentBuffer()
  let startName = bufname('%')
  while 1
    exe "normal! \<c-o>"
    let nowName = bufname('%')
    if nowName != startName
      break
    endif
  endwhile
endfunction

nnoremap <silent> <C-U> :call GoBackToRecentBuffer()<Enter>


您可能会为<C-I>编写类似的内容。问题:


如果没有先前的缓冲区,它将继续无声循环,直到您按下CTRL-C!

相关:



:jumps列出了CTRL-O将退回的历史位置。
Vim的默认CTRL-T是捣碎CTRL-O的不错选择,因为它的粒度更粗:仅通过标签跳转后退。


评论


Vim似乎只提供了一层CTRL- ^公开的MRU文件历史记录。但是我注意到在使用:kwbd关闭一些缓冲区时,Vim确实会按照预期的反向历史顺序退回到先前的缓冲区。 Vim可能有一个未与我们共享的MRU列表,或者它可能根据CTRL-O位置历史记录(:jumps)选择要回退的缓冲区。

– joeytwiddle
15年7月29日在23:27

另外,autocmd InsertLeave * normal mZ会记住全局标记Z中最后编辑的文件。您可以使用g'Z返回该文件。 //我有nmap g'Z,但是我仍然倾向于更频繁地使用Ctrl-U。

– joeytwiddle
15年8月22日在17:18



#2 楼

您可以使用:ls显示所有缓冲区。例如:

:ls
  1      "vim.markdown"                 line 160
  2      "ext.markdown"                 line 0
  3 #    "~/to"                         line 1
  4 %a   "~/TODO"                       line 68


要返回缓冲区ext.markdown,请使用:e +Nbuf,其中N是第一列中的缓冲区编号。例如::e +2buf

您可以创建一个简单的功能以获得更交互式的体验:键入要编辑的缓冲区的编号。

这不是“最近使用的”,因为顺序是“最近打开的”(这也可能就是为什么:ChooseBuf / <Leader>b不如您所愿)

#3 楼

<C-6>是您所需要的,它将带您返回到当前缓冲区之前打开的缓冲区。还可以使用:bprev:bnext

评论


不错,但是我不能用它跳回两个缓冲区。 bprev和bnext不在跳转顺序中。

–普莱克斯
2015年2月6日,9:40

是的,我认为没有什么更好的方法可以深入了解历史。您必须使用一些MRU插件,即使CtrlP有一个,也必须有其他插件

–德鲁瓦·萨加尔(Dhruva Sagar)
15年2月6日在9:54

注意:它不是,它是。尽管在许多终端仿真器上没有区别,但在某些(包括OS X附带的)上却没有区别。对于后一种情况,需要使用Shift键(假设Qwerty布局)。

–tommcdo
2015年2月9日,11:55

@tommcdo有趣,我在osx上,但是使用iterm代替terminal.app,它对我来说是相同的。要求使用Shift键实在太可惜了。

–德鲁瓦·萨加尔(Dhruva Sagar)
2015年2月9日,12:18

想一想,可能只是我的OS正在抓取该键绑定,而没有将其传播到Vim。我的操作系统必须停止!

–tommcdo
2015年2月9日下午13:45

#4 楼

您还可以使用:oldfiles来获取已编辑文件的列表。

列表中将包含与文件名关联的数字。选择一个文件,记下数字(例如14)并使用:edit #<14打开它。您还可以在该文件上运行其他命令,或一次将多个文件传递给一个命令。关于此的更多信息

评论


链接中的另一个答案告诉我:bro [wse] ol [dfiles] [!]

–史蒂夫
16-2-5在14:03