Bash에서 Tab전화를 걸 때프로그래밍 가능한 완성기능 및 (a) 입력한 내용과 일치하는 고유한 경로 또는 명령으로 확장되거나 (b) 가능한 옵션 목록으로 확장됩니다.
취소가 가능한가요?전체 확장Tab를 눌러 만든 ?
예:
- 내 현재 명령은 입니다
ls application/views/
. - 이 명령에는 두 가지 확장명, 즉
helpers/
및 가 있습니다scripts/
. - 입력 heTab했더니
helpers/
. - 나는 깨닫는다다른 뜻
scripts
. - 이제 전체 확장 "helpers/"를 제거해야 합니다.
나는 보통 전체 경로( helpers/
이 경우)를 백스페이스합니다. 왜냐하면 행을 읽는 것이 실행 취소 Control+ _지루하기 때문입니다. 내가 원하는 것은 원래 입력한 문자와 끝에 추가된 공백이나 슬래시와 상관없이 확장의 전체 일치 항목을 제거하는 단일 키 시퀀스입니다.
의견이나 내가 읽은 내용에서 제안된 키 시퀀스의 실행 목록GNU 참조.이들 중 어느 것도 목표를 달성하지 못했습니다.:
- Meta+ -- 삭제하지 않고 b이전으로 이동합니다 .
/
- Meta+ Del-- 단어 전체가 아닌 문자 하나를 삭제합니다.
- Meta+ Backspace-- 삭제하지 않고 한 문자 뒤로 이동합니다.
- Control+ W-- 확장된 경로뿐만 아니라 전체 경로를 제거합니다. 따라서 내 예에서는 bash를 누르면 Tab확장되고 + bash를
ls application/views/helpers
누르면 삭제됩니다 .ControlWapplication/views/helpers
관련이 있는 경우 Gentoo Linux 시스템에서 vi 편집 모드를 사용하고 있습니다. 구성을 확인했는데 문자가 다시 매핑되지 않았습니다.
답변1
당신이 제공하는 것은 키 입력이지만 그렇지 않습니다.읽기 라인 바인딩, 이는 관찰된 동작의 차이를 설명할 수 있습니다(시도 bind -p
).
내가 생각할 수 있는 유일한 방법정확히당신이 요구하는 것은 버퍼 상태를 저장하는 사용자 정의 완성 함수와 버퍼 상태를 복원하기 위해 동반 셸 함수를 호출하는 별도의 키 바인딩입니다.
@Mark Plotnick의 훌륭한 제안 외에도 menu-complete
다른 readline/bash 옵션은 다음과 같습니다.
shell-backward-kill-word
확장된 파일이나 경로의 경우 전체 파일이나 경로 이름이 되는 "쉘 단어"가 제거됩니다.backward-kill-word
이는 파일이나 경로의 경우 후행을 포함하여 파일이나 디렉터리 이름 구성 요소가 될 "readline 단어"를 제거합니다./
undo
모든 변경 사항을 원자적으로 취소하지만 전체 확장을 완전히 제거하려면 여러 번 시도해야 할 것입니다. 이는 거의 확실하게 바인딩하는 기능입니다 ctrl. _(bash 기본값)set-mark
kill-region
줄 읽기,set-mark
현재 커서 위치 표시,kill-region
표시에서 커서까지 삭제 등 덜 사용되는 기능 입니다 . 이를 위해서는 나중에 다시 삭제를 사용할 수 있도록 미리set-mark
(기본값 meta- ) 호출해야 합니다 (기본 바인딩 없음).spacekill-region
possible-completions
( meta- 에 바인딩됨 =) 완료 항목을 나열합니다.아니요명령 버퍼 수정
입력 버퍼를 수정하고 이를 함수에 바인딩하는 함수를 직접 작성할 수도 있습니다(여기예전에 만들었던 것backward-kill-word
) 하지만 이 상황보다 훨씬 나을지는 모르겠습니다.
.inputrc
bash 명령을 사용하지 않고 즉시 바인딩을 테스트할 수 있습니다 bind
. 예를 들면 다음과 같습니다.
bind "\C-o: backward-kill-word"
bind "\C-o: shell-backward-kill-word"
backward-kill-word
가 가장 적합하며 기본 바인딩은 metactrl- 입니다 h. set-mark
/ kill-region
이면 더 좋겠지만, 이를 자동화하는 영리한 방법이 생각나지 않습니다.