아마추어가 zsh의 구조를 배우면서 잘 가는 디렉토리에 갈 수 있도록 해본다

3589 단어 ZshPeco

소개



첫째, zsh에는 cdr 및 z와 같은 유명한 확장이 있습니다. 제대로 설계된 것을 사용하고 싶다면 그쪽을 사용하십시오. 하지만 아마추어가 무엇을 해보고 싶다면 기존의 것이 있는지 걱정하지 않고 해보면 좋겠다고 생각합니다. 별로 이것으로 일을 하고 있는 것도 아닌 아마추어는 바퀴의 재발명은 신경쓸 필요가 없습니다. 같은 물건이든 열화품이든 무엇이든 만들고 배우자. hello.c 뭐, 도대체 지금까지 몇 번 쓰여져 온 것일까. 대체로 나, hello.c 를 소라로 쓸 수 없고.

zsh가 cd 할 때 자동 실행하는 것은 무엇입니까?


function chpwd() 가 실행됩니다.
function chpwd() {
  echo "ふざけてんの?"
}

그렇다면,zsh
% cd
ふざけてんの?
% cd
ふざけてんの?
% cd
ふざけてんの?
% cd
ふざけてんの?
됩니다.

어떻게 디렉토리 빈도를 저장하자



텍스트에 써도 괜찮습니다만, 여기는 솔직하게 sqlite 를 사용합시다. 아니, 내가 사용하고 싶었어요. sqlite의 DB에 경로와 횟수를 기록하기로 결정합니다. 이제 DB를 빠르게 만들자. 보통 제품이라면 처음 시작할 때 자동 생성하는 것입니다만, 자신 제품입니다. 신경 쓰지 말자.
sqlite3 $HOME/.cache/.dirstack.db "create table dirstack(path text, freq integer)"

에서 DB에 쓰는 스크립트는

~/.local/bin/OreDirStack
#!/bin/zsh
DIRSTACK_DB=$HOME/.cache/.dirstack.db

# カレントディレクトリの回数を調べます。なければ失敗して count は空です。
count=$(sqlite3 $DIRSTACK_DB "select freq from dirstack where path=\"$PWD\" ")

# count が空なら現ディレクトリ、1 回を登録
if [ -z $count ]; then
  sqlite3 $DIRSTACK_DB "insert into dirstack values(\"$PWD\",1)"
else
# そうじゃなかったら、1 足して登録
  count=$(( $count + 1 ))
  sqlite3 $DIRSTACK_DB "update dirstack set freq=$count where path=\"$PWD\" "
fi

# Validation
# sqlite3 $DIRSTACK_DB "select * from dirstack order by freq DESC"

return

해당 DB를 사용하여 이동합시다.



여기는 당연히 peco일 것입니다. 빈도가 높은 순서로 나열된 쿼리 결과를 peco에 흘려 넣어 사용합니다. 어려운 zle 함수라든지 쓸 수 없어도 zsh 의 global alias 로 다음과 같이 하면 cd :df 로 빈도가 높은 디렉토리에 순식간에 이동할 수 있습니다.
alias -g :df='$(sqlite3 ~/.cache/.dirstack.db "select path from dirstack order by freq desc"| peco)'

좋은 웹페이지 즐겨찾기