메모를 활성화하는 짧은 스크립트를 찾았습니다.다 잘됐어, 포함:
function n { nano ~/n/$1.txt }
기존 주석 "foobar"(~/n/foobar.txt)를 편집하려는 경우 입력할 필요 없이 입력 foo[TAB]
하고 자동 완성되도록 이것을 탭 완성으로 확장하고 싶습니다. foobar
"foobar"는 매번 "입니다. 문제는 bash의 내장 탭 완성이 현재 디렉토리 중심에 있는 것 같아서 ~/n 이외의 폴더에 있으면 탭 완성이 실패하거나 더 나쁘게는 잘못된 작업이 수행된다는 것입니다. 아마도 ~/snafu/에 'footastic'이라는 파일이 있을 수 있기 때문입니다. 즉, 을 보는 $ n foo[TAB]
대신 $ n foobar
을 입력하고 입력 내용을 보고 다음을 봅니다 $ n footastic
.
따라서 모든 서문이 끝난 후 질문은 다음과 같습니다. 가능하다면 'n'을 입력한 후 bash에게 어떻게 알릴 수 있습니까?딱 한번만현재 디렉터리에 있는 파일을 사용하는 대신 ~/n에 있는 파일을 사용하여 작업을 수행한다고 가정하기를 바랍니다.
이 전자 독백을 모두 이해했다면 축하합니다.답변정말 고마워요!
답변1
이걸로 당신은 거기까지 갈 수 있을 것 같아요...
.bashrc에서 사용자 정의 탭 완성 활성화
shopt -s progcomp
compgen 함수를 생성하고 .bashrc에 추가하세요.뒤쪽에메모 작성 기능.
_notes() { local cur cur=${COMP_WORDS[COMP_CWORD]} COMPREPLY=( $(compgen -f $HOME/n/$cur | cut -d"/" -f5 ) ) } complete -o filenames -F _notes n
이것은 기본 수준에서 저에게 효과적입니다. 아직 중첩된 디렉토리 문제를 해결하지 못했습니다.
인용하다:
대부분은 여기에서 왔습니다:http://sixohThree.com/867/bash-completion
여기에 내장된 세부정보를 완료하세요.http://www.gnu.org/software/bash/manual/html_node/Programmable-Completion-Builtins.html
답변2
jasonwryan의 답변에 대한 후속 조치를 위해 cut을 사용하여 알려진 경로 대상의 시작 부분을 잘라냈습니다.
_c ()
{
local cur
COMPREPLY=()
cur=${COMP_WORDS[COMP_CWORD]}
case "$cur" in
*)
COMPREPLY=( $(compgen -f /src/$cur | cut -c 6-) )
;;
esac
return 0
} &&
complete -o filenames -F _c c
이를 통해 아래의 디렉터리, 하위 디렉터리 또는 파일 이름을 직접 조작할 수 있습니다./src/