
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 000
TAB대체됩니다 .000
/path/to/000-default
설명
이것이 작동하는 방식은 에 대한 인수를 누를 때마다 complete -F _vim_complete_file vim
bash에게 함수를 사용하도록 지시하는 것 입니다 . 그런 다음 TAB을 누를 때 커서가 있던 현재 단어에서 함수 가 실행됩니다 . 그러면 일치하는 파일 목록이 반환됩니다. 그런 다음 해당 파일 목록이 전달되어 정규화된 경로를 생성합니다. 이 목록은 쉘이 사용 가능한 완성 항목을 찾는 배열로 저장됩니다 ._vim_complete_file
TABvim
compgen -A file
realpath
COMPREPLY
답변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
.