Abra o último arquivo no dir com vim

1

Escrevo um diário e nomeio os arquivos de forma desmarcada AAAA-MM-DD.mark. Quando pretendo alterar algo da última entrada, gostaria de abri-lo com um atalho, em vez de escrever a data completa (a conclusão do bash não ajuda em nada).

Como posso abrir o último arquivo (em ordem alfabética) no vim?

Martin Ueding
fonte

Respostas:

2

Se é realmente o último arquivo:

vim $(find . -type f  -maxdepth 1 | sort | tail -n 1)

Ou, para ser mais específico sobre os arquivos de remarcação:

vim $(find . -name "*.markdown" -maxdepth 1 | sort | tail -n 1)

Obviamente, você pode criar um alias para isso no seu perfil do bash.

alias newest='vim $(find . -name "*.markdown" -maxdepth 1 | sort | tail -n 1)'

Editado porque o xargs e o vim causam alguns problemas sérios após a sua saída. Tem que descobrir por que isso é. Eu também tinha backticks antes, mas usar em $()vez de backticks é o novo caminho a percorrer.

slhck
fonte
parece bom. Mas acontece se eu tiver o seguinte nome de arquivo: "2011-05-19.markdown; rm -rf ~"? Xargs não é inseguro?
Martin Ueding
Quem teria esse nome de arquivo? :) Se você quiser chamar dessa maneira, xargsé claro que é inseguro. Mas: Acontece que você não pode usar xargse vimjuntos de qualquer maneira. Veja meu post editado acima, isso deve ser mais fácil.
Slhck 19/05/11
Como aprendi no #bash, você não deve perguntar "Quem tem esses nomes de arquivo?" mas torne seu código seguro para que ele possa lidar com isso.
Martin Ueding
@queueoverflow É justo, eu estava apenas brincando :) Obrigado pela edição!
slhck 19/05/11
findnão retorna a saída classificada, portanto tail -n 1, retornará o último item na saída de find, que não é necessariamente o arquivo mais recente. A adição de um | sortdepois finddeve resolver isso.
Burhan Ali
1
vim "$(ls -1 *.markdown | tail -n 1)"

Funciona com espaços nos nomes de arquivos e não precisa nem find(que se repete por padrão, que pode não ser o que você deseja) nem sort(a saída de lsé alfabética por padrão).

DevSolar
fonte