탭 완성을 위한 대상 디렉터리를 어떻게 변경합니까?

탭 완성을 위한 대상 디렉터리를 어떻게 변경합니까?

메모를 활성화하는 짧은 스크립트를 찾았습니다.다 잘됐어, 포함:

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

이걸로 당신은 거기까지 갈 수 있을 것 같아요...

  1. .bashrc에서 사용자 정의 탭 완성 활성화

    shopt -s progcomp

  2. 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

이것은 기본 수준에서 저에게 효과적입니다. 아직 중첩된 디렉토리 문제를 해결하지 못했습니다.

인용하다:

  1. 대부분은 여기에서 왔습니다:http://sixohThree.com/867/bash-completion

  2. 여기에 내장된 세부정보를 완료하세요.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/

관련 정보