주문을 선택하시겠습니까?
마지막 기사 : 주문은 상위 디렉토리로 돌아가는가?
또한 cd 명령에 손을 넣습니다.
이번에는 Simplistic interactive filtering tool의 Peco을 사용합니다.
제4마리 「peco를 하는 이야기」
몇 번 달인지 모르겠지만, peco라는 선택 도구를 도입하여 사용해 나가려고 생각합니다.
fzf라도 있기 때문에, 쉘 변수라든지 환경 변수로 해 여러가지 툴을 선택할 수 있도록 범용적으로 해 가면 좋네요. (그 예정은 없지만)
peco 도입
리포지토리 거리 에 넣어 주세요.
보통, 출시 페이지 로부터 바이너리 떨어뜨려 PATH에 넣는 것 뿐입니다.
무엇을 peco하는가?
우선, 샘플로서 제일 기사가 많은 커멘드 이력을 peco 해 봅시다.
사양은 텍토인 느낌으로 좋지요.
- 새로운 역사가 위로 올 것
- 같은 이력은 최근의 물건만으로 좋다(중복해서 표시하지 않는다)
bashrcpeco_history()
{
local descending_order
if which sort &> /dev/null; then
descending_order='sort -r'
elif which tac &> /dev/null; then
descending_order='tac'
else
descending_order='tail -r'
fi
local trim_line_number='sed -re "s/^\s+[0-9]+\s+//"'
local trim_duplication='awk '\''!dictionaty[$0]++'\'''
local CMD=$(\history \
| eval $descending_order \
| eval $trim_line_number \
| eval $trim_duplication \
| peco --query "${READLINE_LINE}")
READLINE_LINE="${CMD}" # Input to terminal's readline
READLINE_POINT=${#CMD} # Set cursor
}
bind -x '"\C-r": peco_history'
스크립트 해설
우선, 이 스크립트는 처리하고 싶은 것을 커멘드로 나타내, 그것을 로컬 변수에 격납하는 스타일을 취하고 있습니다.
그렇지 않으면, 바보의 나는 토일요일을 지나면 "이 명령은 무엇을 실현하고 싶어……?"이 되어 버리기 때문입니다.
리포지토리 거리 에 넣어 주세요.
보통, 출시 페이지 로부터 바이너리 떨어뜨려 PATH에 넣는 것 뿐입니다.
무엇을 peco하는가?
우선, 샘플로서 제일 기사가 많은 커멘드 이력을 peco 해 봅시다.
사양은 텍토인 느낌으로 좋지요.
- 새로운 역사가 위로 올 것
- 같은 이력은 최근의 물건만으로 좋다(중복해서 표시하지 않는다)
bashrcpeco_history()
{
local descending_order
if which sort &> /dev/null; then
descending_order='sort -r'
elif which tac &> /dev/null; then
descending_order='tac'
else
descending_order='tail -r'
fi
local trim_line_number='sed -re "s/^\s+[0-9]+\s+//"'
local trim_duplication='awk '\''!dictionaty[$0]++'\'''
local CMD=$(\history \
| eval $descending_order \
| eval $trim_line_number \
| eval $trim_duplication \
| peco --query "${READLINE_LINE}")
READLINE_LINE="${CMD}" # Input to terminal's readline
READLINE_POINT=${#CMD} # Set cursor
}
bind -x '"\C-r": peco_history'
스크립트 해설
우선, 이 스크립트는 처리하고 싶은 것을 커멘드로 나타내, 그것을 로컬 변수에 격납하는 스타일을 취하고 있습니다.
그렇지 않으면, 바보의 나는 토일요일을 지나면 "이 명령은 무엇을 실현하고 싶어……?"이 되어 버리기 때문입니다.
peco_history()
{
local descending_order
if which sort &> /dev/null; then
descending_order='sort -r'
elif which tac &> /dev/null; then
descending_order='tac'
else
descending_order='tail -r'
fi
local trim_line_number='sed -re "s/^\s+[0-9]+\s+//"'
local trim_duplication='awk '\''!dictionaty[$0]++'\'''
local CMD=$(\history \
| eval $descending_order \
| eval $trim_line_number \
| eval $trim_duplication \
| peco --query "${READLINE_LINE}")
READLINE_LINE="${CMD}" # Input to terminal's readline
READLINE_POINT=${#CMD} # Set cursor
}
bind -x '"\C-r": peco_history'
descending_order
새로운 이력을 위로 가져오는 사양을 충족하기 위해 내림차순으로 정렬하는 처리를 담당하고 있습니다.
아무도 이것도 bash의 내장이 아니었기 때문에 가지고 있는지를 조사하고 있습니다.
우선 3 개를 조사하면 어느 것이 있겠지 (´・_・`)tac은 Mac에서는 안 된다든가
trim_line_number
이번에는 이력 취득에 history 명령을 내장 실행하고 있습니다만, 이력 번호를 부여해 버리므로 그것을 제거합니다.
trim_duplication
히스토리 표시는 중복하지 않는 사양을 채우기 위해, 사전식 배열을 만드는 것으로 실현하고 있습니다.
awk에서 이런 생각한 사람 천재군요
이들은 변수에 저장되므로 주어진 순서대로 eval 명령으로 실행하여 마지막으로 peco로 파이프합니다.
peco의 query 옵션은 초기 QUERY로 문자열을 전달하는 것 같습니다.
이미 입력되어 있는 문자열을 건네주는 것으로, 입력 도중에 실행하면 처음부터 그 문자열로 좁혀 둘 수 있습니다.
마지막으로 terminal에 반영하기 위해 변수에 결과를 저장합니다.
READLINE_LINE
terminal에 입력된 문자열을 peco에서 선택한 결과로 바꿉니다.
peco로 복수 선택했을 경우의 케어? 알려주세요
READLINE_POINT
terminal 의 커서의 위치를 캐릭터 라인의 마지막으로 하고 있습니다.
변수에 #을 붙이면 변수 확장이 이루어져 문자열을 얻을 수 있습니다.
참고 : 【쉘 연예인에의 길】 Bash의 변수 전개와 진지하게 마주한다
마지막은 이것을 기본적으로 히스토리 검색을 담당하는 바로 가기 키를 bind 명령으로 덮어 쓰면 끝입니다.
마지막
이런 느낌으로 사용할 수 있습니다.
상당히 편리하네요.
git log를 파스하거나 여러가지로 두면 편리할지도 모르겠네요.
좀 더이 peco를 사용하고 싶습니다.
또는 명령 이름을 입력 할 때,
그 잘못된 명령을 기록에 쓰지 않는 방법이 있습니까? (´・_・`)다레카
Reference
이 문제에 관하여(주문을 선택하시겠습니까?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Riliumph/items/4fe9cb958a6f56864e9f
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(주문을 선택하시겠습니까?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Riliumph/items/4fe9cb958a6f56864e9f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)