화면 에서 마지막으로 일치하는 식별자 를 완성하도록 Bash, Zsh 또는 Tmux를 어떻게 구성 할 수 있습니까? 이 일반적인 시나리오를 고려하십시오.
$ git fetch
remote: Counting objects: 16, done.
remote: Compressing objects: 100% (9/9), done.
remote: Total 9 (delta 4), reused 0 (delta 0)
Unpacking objects: 100% (9/9), done.
From /opt/git/thunder
* [new branch] issue540 -> origin/issue547314
e9204cf..4d42c3f v2.1 -> origin/v2.1
issue547
CLI에서 Bash / Zsh / Tmux를 쉽게 완료 하려면 어떻게해야합니까? Git이 도움이되고 난 Tab후에를 누르면 이전의 모든 숫자가 실제로 존재하는 Git 분기와 일치 하기 때문에 숫자를 직접 작성해야합니다 .$ git checkout is
issue
VIM에서 전제 조건으로 Ctrl+ P를 누르면 이전 경기와 같이 완료되므로이 경우 issue547314
실제로 완료됩니다. 이 동작을 Bash, Zsh 또는 Tmux에서 어떻게 얻을 수 있습니까?
현재 우분투 서버 (보통 12.04 LTS)에서 Bash 4.2 및 Tmux 1.10을 사용하고 있습니다. 필요한 경우 최신 Ubuntu Server LTS (14.04)로 업데이트 할 수 있습니다.
편집 : 사용하기 어려운 한 Bash, Zsh 또는 Tmux를 사용하는 솔루션은 신경 쓰지 않습니다. 그래서 Tab나 Ctrl+ P또는 다른 같은 바로 가기 괜찮을하지만,하지 않을 Alt+ Meta+ Super+ Shift+ א.
답변
OP가 찾고있는 기능 은 Emacs 세계에서 dabbrev-expand 라고합니다 .
버퍼에서 해당 약어 (v-expand)로 시작하는 단어를 검색하여 버퍼 앞의 단어를 동적 abbrev로 확장하십시오.
xterm
또한 dabbrev-expand
기능이 있지만 Emacs 대응보다 조금 덜 똑똑하지만 나에게 매우 유용하며 하나는 내가 전환 한 이유 중 하나였습니다 xterm
. xterm
윈도우 내부 에서는 지정된 문자열 ~/.Xresources
을 호출하기 위해 지정된 사용자 정의 키 바인딩을 사용할 수 있습니다 dabbrev-expand
. 예를 들어, 나는 ~/.Xresources
( uxterm
xterm의 유니 코드 버전 인)에 다음 항목을 가지고 있습니다 .
UXTerm*VT100.Translations: #override \n\
Meta <Key>/:dabbrev-expand() \n\
내부 xterm
창에서 M-/
( ALT + /
)를 사용 하여 호출 할 수 있습니다 dabbrev-expand
. xterm
입력 한 문자로 시작하는 화면에 보이는 모든 문자열을 찾습니다. 예:
$ echo a_very_long_string bye by
$ a_v
M-/
지금 누르면으로 xterm
확장 a_v
됩니다 a_very_long_string
. 불행히도 내가 말했듯 xterm
이 똑똑하지 않으며 그 dabbrev-expand
기능은 전체 문자열에서만 작동합니다. 따라서 귀하의 경우 에는 일부 이기 때문에 is
확장 issue540
되지 않을 것 입니다 ( 정규 표현식과 마찬가지로 생각하십시오. 대부분의 정규 표현식 엔진은에서 두 문자열을 모두 포착하지만 조금 비슷합니다 ). 그러나 입력 한 다음 대가로 할 수 있습니다 . 먼저 확장 할 것입니다 . 이것은 우리가 원하는 것이 아니므로 다시 눌러 확장합니다 . 이제 Bash를 사용하면 ,issue547314
issue547314
origin/issue547314
\b
issue
\bissue.+\b
or
M-/
xterm
or
origin/v2.1
M-/
xterm
origin/issue547314
M-b
C-w
및 C-e
제거하는 origin/
부분. 요약하면, dabbrev-expand
내부 xterm
는 Emacs (그리고 Vim이 생각하는 것)만큼 좋지는 않지만 손으로 긴 문자열을 다시 작성하고 오타가 적은 경향이 있습니다. 대부분의 경우 중복 부품을 제거 할 필요없이 원하는 문자열로 직접 확장됩니다. 당신은 그것에 익숙해 져야합니다-커서에두고 싶은 문자열을보고 다른 것이 선행되지 않는지 확인하십시오. 앞 부분에 입력하고 확장 후 제거하십시오.
참고 xterm
로 컴파일되지 dabbrev-expand
기본적으로 기능하고 명시 적으로 활성화해야합니다. 그러나 xterm
Ubuntu 리포지토리의 버전 은 컴파일되어 dabbrev-expand
즉시 사용할 수 있습니다.
답변
bash completetion이라는 유사한 시설로서 배쉬. Tab명령을 입력 할 때 인수를 제공 할 때 키 를 눌러이를 사용할 수 있습니다 .
예
입력 ls
한 다음 Tab두 번 쳐서 시작 하면 Bash는 사용하려는 명령에 일치하는 파일 (및 명령 줄 스위치) 목록을 제공합니다.
$ ls <---- hit Tab x 2
Display all 232 possibilities? (y or n)
다음은 스위치를 사용한 예입니다.
$ ls -- <---- hit Tab x 2
--all --format= --quote-name
--almost-all --group-directories-first
....
....
설정?
내 설치에는 이미 다음 규칙이 포함되어 있습니다 git
.
/etc/bash_completion.d/git
이 파일은 git
패키지를 설치할 때 설치 되었습니다. 저는 Fedora 19를 사용하고 있지만 다른 배포판 에서도이 작업을 수행해야합니다.
$ rpm -qf /etc/bash_completion.d/git
git-1.8.3.1-1.fc19.x86_64
규칙 파일을 보면 다음 상황에서 자동 완성을 용이하게 할 수 있다고 설명합니다.
# The contained completion routines provide support for completing:
#
# *) local and remote branch names
# *) local and remote tag names
# *) .git/remotes file names
# *) git 'subcommands'
# *) tree paths within 'ref:path/to/file' expressions
# *) file paths within current working directory and index
# *) common --long-options
#
그래서 이것은 당신을 위해 “그냥 작동”해야합니다.
답변
extrakto를 사용 하여 이와 같은 작업을 수행 할 수 있습니다 .
- extrakto
prefix + tab
를 시작하려면 tmux 를 누르십시오 - 퍼지 텍스트 / 경로 / URL 찾기
- 프레스
tab
현재 창에 삽입하려면enter
클립 보드에 복사하고ctrl-o
경로 / URL을 열거 나ctrl-e
로 편집$EDITOR