使用 vim 以相反的顺序打开目录中的所有文件

使用 vim 以相反的顺序打开目录中的所有文件

如何使用 vim 按字母逆序打开给定目录中的所有文件?命令 -

vim *

将按字母顺序打开所有文件。我如何以相反的顺序遍历文件:n?我发现使用tac 这里,另一个解决方案是显示文件内容这里以及 emacs 的解决方案这里,但它们不是的解决方案vim

答案1

总体思路可能是逆转*结果:

printf '%s\n' * | tac

并将其与 一起用于xargs生成vim。这有两个问题:

  1. 一般来说文件名可能包含换行符,因此最好用空字符分隔并使用xargs -0

  2. vim在管道中生成的xargs命令会抱怨输入不是来自终端。可能会发生奇怪的事情。如果您xargs支持-o/dev/tty在执行命令之前重新打开 stdin,就像在子进程中一样),那么请使用它。

整个解决方案如下:

printf '%s\0' * | tac -s "" | xargs -0o vim

笔记:

  • tacPOSIX 不要求;xargs可能不支持所使用的选项。整个方法不可移植。
  • 空字符串作为选项参数似乎tac -s将空字符设置为分隔符,而没有明确传递任何空字符(这可能会有问题)。
  • ARG_MAX限制,则无法运行更长的命令。如果文件很多,扩展*可能会超出限制,您可能会得到Argument list too long。如果printf是 shell 中的内置命令,则此时限制可能不适用。当xargs尝试生成时,它仍然适用vimxargs将检测到这一点并按顺序运行两个或更多vim进程(如果需要)。但是,这可能不是您想要的。希望如此,因为您要手动迭代:n,我预计文件数量不会那么大,所以ARG_MAX不会有问题。

相关内容