상대 경로를 확장하고 명령줄에서 탭 완성을 사용하는 방법은 무엇입니까?

상대 경로를 확장하고 명령줄에서 탭 완성을 사용하는 방법은 무엇입니까?

bash탭 완성을 사용하여 상대 경로를 절대 경로로 확장하는 방법이 있습니까 ?

제가 이 질문을 하는 이유는 가끔 파일을 검색해서 찾은 다음 다음과 같은 경우가 있기 때문 vim입니다.

cd /etc
cd apache2
cd sites-available
vim 000-default

그런 다음 다른 작업을 수행하고 디렉토리를 변경하겠습니다.

cd /tmp
ls
cd ~
ls

그런 다음 동일한 파일을 다시 편집해야 하지만 history파일 경로가 상대적이기 때문에 작동하지 않습니다(또는 기록 검색).

현재 해결 방법

파일을 자주 재사용할 것이라는 것을 안다면 파일을 찾은 후 다음을 사용하여 전체 경로를 얻습니다 realpath.

$ realpath 000-default
/etc/apache2/sites-available/000-default
(copy and paste path into next command:)
$ vi /etc/apache2/sites-available/000-default

지침

여전히 복사하여 붙여넣기가 필요합니다. 내 기록에 파일의 전체 경로를 가져오는 더 쉬운 방법이 있어야 한다고 생각합니다. 내 옵션은 무엇입니까?

나는 상대 경로를 전체 경로로 확장하기 전에 (실수로) 몇 가지 키 조합을 눌렀다고 생각합니다. Bash에서는 다음을 입력할 수 있다는 것을 알고 있습니다.

cd /etc
ls bash_*(control+x *)

그리고 얻다:

ls bash.bashrc bash_completion bash_completion.d

그렇다면 파일에 대한 전체 경로를 사용하여 기록의 파일에 대한 작업을 저장할 수 있도록 상대 경로를 절대 경로로 확장하는 방법이 있습니까?

답변1

나는 이것을 할 좋은 방법을 찾을 수 없습니다.

내가 한 일은 $PWD파일 이름 앞에 입력하고 눌러서 Tab확장하는 것뿐이었습니다. 대신 ++ 를 bash눌러야 할 수도 있습니다 .CtrlAlteTab

예를 들어

vi $PWD/000-default

그 다음에

Ctrl+ Alt+e

그 다음에

Enter

답변2

이를 위해 Bash에서 프로그래밍 가능한 탭 완성을 사용할 수 있습니다.

function _vim_complete_file() {
    IFS=$'\n' read -d '' -a FILES <<< "$( compgen -A file "${COMP_WORDS[$COMP_CWORD]}" )"
    IFS=$'\n' read -d '' -a COMPREPLY <<< "$( realpath "${FILES[@]}" )"
}

complete -F _vim_complete_file vim

이제 를 입력하면 로 vim 000TAB대체됩니다 .000/path/to/000-default

설명하다
작동 방식은 인수를 누를 때 bash에게 complete -F _vim_complete_file vim함수를 사용하도록 지시하는 것입니다. 그러면 TAB을 눌렀을 때 커서가 있던 현재 단어에서 함수가 실행됩니다. 그러면 일치하는 파일 목록이 반환됩니다. 그런 다음 이 파일 목록이 전달되어 정규화된 경로를 생성합니다. 목록은 쉘이 사용 가능한 완성을 찾는 배열로 저장됩니다._vim_complete_fileTABvim
compgen -A file
realpathCOMPREPLY

답변3

이전 디렉터리로 더 쉽게 돌아가기 위해 Pushd 및 Popd 사용을 시작할 수 있습니다.http://gnu.org/software/bash/manual/bashref.html#The-Directory-Stack

귀하의 댓글을 봤습니다 cdargs(그런 것 같습니다.이것). 자주 사용하는 디렉터리에는 별칭이나 함수를 사용합니다. 예를 들어

alias cgi='pushd /path/to/apache/cgi-bin'

또는

docs() { pushd /path/to/apache/docroot/"$1"; }

가능한 경우 두 번째 양식이 유용합니다.부모자주 나타나는 하위 디렉터리를 찾으면 docs foo그 곳으로 이동하세요 /path/to/apache/docroot/foo. 단점은 탭 완성 기능을 잃게 된다는 점이지만 나에게는 그다지 어렵지 않습니다.

답변4

Vim에서 다시 편집하려면 :browse oldfiles및 를 확인하세요 :help oldfiles.

관련 정보