在 VIFM 中,如何定义将我带到最近编辑的文件的移动?

在 VIFM 中,如何定义将我带到最近编辑的文件的移动?

当我位于目录中的其他位置时,我无法找到直接移动到最近编辑的文件的 VIFM 动作。有这样的动议吗?如果没有,是否可以定义一个?

我尝试使用时间修改的窗口排序,然后用 gg 跳到顶部。然而,这种排序将目录放在窗口顶部,因此 gg 将我带到那里。它很接近,但因为这是我经常想做的事情,所以我希望尽量减少实现它的努力。谢谢!

答案1

的文档fnameescape包含一个示例命令,该命令将光标移动到最近修改的文件,但该文件也可以是目录。

因此,为了准确满足您的请求,请将下面的片段放入 ~/.config/vifm/vifmrc,重新启动 Vifm,现在您可以使用 ,f跳转到最新的非目录文件*

"Cursor to most recently modified file
noremap ,r :exe 'goto' fnameescape(system('ls -At   | head -n 1'))<CR>

"Cursor to least recently modified file
noremap ,o :exe 'goto' fnameescape(system('ls -Art  | head -n 1'))<CR>

"Cursor to most recently modified non-directory file
noremap ,f :exe 'goto' fnameescape(system('ls -Atp  | grep -vm1 /'))<CR>

"Cursor to least recently modified non-directory file
noremap ,l :exe 'goto' fnameescape(system('ls -Atrp | grep -vm1 /'))<CR>

如您所见,为了您的方便,我还提供了其他相关映射。

*假设文件名不包含换行符。

它是如何工作的?

goto是将光标移动到给定文件的 Vifm 函数。

所需的文件是 列出的第一个非目录文件ls -Atp,即不包含斜杠的第一行。grep -v /过滤掉包含斜杠的行,并且该-m1选项告诉它只返回第一个匹配项。

虽然-m在 BSD 和 GNU/Linux 系统中可用,但 POSIX 并不需要它,因此如果您的 Grep 缺少它,只需使用 grep -v / | head -n 1orsed '\:/:d;q'代替。

相关内容