vim を使用してディレクトリ内のすべてのファイルを逆順に開く

vim を使用してディレクトリ内のすべてのファイルを逆順に開く

vimを使用して、特定のディレクトリ内のすべてのファイルを逆アルファベット順に開くにはどうすればよいでしょうか? コマンド -

vim *

:nはすべてのファイルをアルファベット順に開きます。逆の順序でファイルを開くにはどうしたらいいでしょうか?tac ここ、ファイルの内容を表示する別のソリューションここ、そしてemacsの解決策ここしかし、それらは に対する解決策ではありませんvim

答え1

一般的な考え方としては、次のような*結果になるものを逆にすることになります。

printf '%s\n' * | tac

これを と一緒に使用して をxargs生成しますvim。これには 2 つの問題があります:

  1. 一般にファイル名には改行文字が含まれることがあるため、ヌル文字で区切って . を使用することをお勧めしますxargs -0

  2. vimxargsパイプで生成されたコマンドは、端末からの入力ではないというエラーを発します。奇妙なことが起こるかもしれません。コマンドを実行する前に子プロセスでstdin を再度開くことをxargsサポートしている場合は、それを使用してください。-o/dev/tty

全体的な解決策は次のようになります。

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

ノート:

  • tacPOSIX では必須ではありません。xargs使用されるオプションをサポートしていない可能性があります。全体的なアプローチは移植可能ではありません。
  • オプション引数として空の文字列を指定すると、tac -sヌル文字を明示的に渡さずにヌル文字を区切り文字として設定するようです (問題が発生する可能性があります)。
  • があるARG_MAX制限、より長いコマンドは実行できません。ファイルが多い場合、 の展開が*制限を超え、 になることがありますArgument list too longprintfがシェルのビルトインである場合、この時点では制限が適用されない可能性があります。それでも、 がxargsを生成しようとすると適用されますvim。はxargsこれを検出し、必要に応じて 2 つ以上のvimプロセスを順番に実行します。ただし、これは必要なことではない可能性があります。 を手動で反復処理するので:n、ファイル数はそれほど多くないと思われるので、ARG_MAX問題はないと思います。

関連情報