Shell

在 vim 中打開最近修改的文件

  • September 24, 2018

以下命令有效

$ ls -1t | head -1
git_sync_log20180924_00.txt

$ vi git_sync_log20180924_00.txt

但這並不

$ ls -1t | head -1 | vi
Vim: Warning: Input is not from a terminal
Vim: Error reading input, exiting...
Vim: preserving files...
Vim: Finished.

我怎樣才能做到這一點(在 vi 中打開最近修改的文件)?

vi -- "$(ls -t | head -n 1)"

(假設文件名不包含換行符)。

或者如果使用zsh

vi ./*(om[1])

或者:

vi ./*(.om[1])

只考慮正常文件。

vi ./*(.Dom[1])

還要考慮隱藏文件(好像使用ls -At)。

無論文件名可能包含什麼字元或字節值,這些都有效。對於與後者等效的 GNU shell&utilities,您可以執行以下操作:

IFS= read -rd '' file < <(
 find . ! -name . -prune -type f -printf '%T@\t%p\0' | sort -zrn | cut -zf2-) &&
 vi "$file"

引用自:https://unix.stackexchange.com/questions/471080