탭 확장을 실행취소하시겠습니까?

탭 확장을 실행취소하시겠습니까?

Bash에서 Tab전화를 걸 때프로그래밍 가능한 완성기능 및 (a) 입력한 내용과 일치하는 고유한 경로 또는 명령으로 확장되거나 (b) 가능한 옵션 목록으로 확장됩니다.

취소가 가능한가요?전체 확장Tab를 눌러 만든 ?

예:

  1. 내 현재 명령은 입니다 ls application/views/.
  2. 이 명령에는 두 가지 확장명, 즉 helpers/및 가 있습니다 scripts/.
  3. 입력 heTab했더니 helpers/.
  4. 나는 깨닫는다다른 뜻 scripts.
  5. 이제 전체 확장 "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-markkill-region줄 읽기, set-mark현재 커서 위치 표시, kill-region표시에서 커서까지 삭제 등 덜 사용되는 기능 입니다 . 이를 위해서는 나중에 다시 삭제를 사용할 수 있도록 미리 set-mark(기본값 meta- ) 호출해야 합니다 (기본 바인딩 없음).spacekill-region
  • possible-completions( meta- 에 바인딩됨 =) 완료 항목을 나열합니다.아니요명령 버퍼 수정

입력 버퍼를 수정하고 이를 함수에 바인딩하는 함수를 직접 작성할 수도 있습니다(여기예전에 만들었던 것backward-kill-word) 하지만 이 상황보다 훨씬 나을지는 모르겠습니다.

.inputrcbash 명령을 사용하지 않고 즉시 바인딩을 테스트할 수 있습니다 bind. 예를 들면 다음과 같습니다.

bind "\C-o: backward-kill-word"
bind "\C-o: shell-backward-kill-word"

backward-kill-word가 가장 적합하며 기본 바인딩은 metactrl- 입니다 h. set-mark/ kill-region이면 더 좋겠지만, 이를 자동화하는 영리한 방법이 생각나지 않습니다.

관련 정보