Computer >> 컴퓨터 >  >> 프로그래밍 >> Bash 프로그래밍

리눅스 .inputrc 파일로 나만의 키 바인딩 만들기: 매크로와 함수 바인딩 완벽 가이드

리눅스 명령줄 환경에서 Readline은 홈 디렉터리에 위치한 .inputrc 설정 파일을 수정함으로써 사용자 지정 키 바인딩(keybinding)을 자유롭게 매핑할 수 있도록 해줍니다.

정의할 수 있는 사용자 지정 키 바인딩에는 크게 두 가지 종류가 있습니다.

  1. 매크로(Macro)
  2. 함수(Function)

매크로(Macro) 정의하기

매크로는 실행 시점에 커서의 현재 위치에 특정 문자열을 자동으로 입력해 주는 키 바인딩입니다. 이를 정의하려면 .inputrc 파일(아직 없다면 새로 생성)에 아래 형식의 한 줄을 추가하면 됩니다.

<키 조합>: "<입력할 문자열>"

예를 들어, 출력 결과를 ~/debug_output.txt 파일로 리다이렉션하는 작업을 반복해서 수행하고 있다고 가정해 보겠습니다. 이 경우 .inputrc 파일에 다음 줄을 추가하면 간단히 매크로를 정의할 수 있습니다.

Control-g: " > ~/debug_output.txt"

이제 Control-g 키 조합을 누를 때마다 리다이렉션 문이 커서 뒤에 삽입되므로, 다른 명령어 끝에 손쉽게 덧붙일 수 있습니다.

매크로 작성 시 유의 사항

  • 키 조합은 영문으로 풀어쓸 수 있습니다. 자세한 내용은 bash 매뉴얼 페이지(man page)에서 "Readline Key Bindings" 섹션을 참고하세요.
  • 매크로가 삽입할 문자열은 반드시 큰따옴표(")로 감싸야 합니다.
  • Control-g는 임의로 선택한 조합일 뿐이며, 본인에게 더 의미 있는 조합으로 얼마든지 변경할 수 있습니다.
  • 기존의 기본 키 바인딩을 덮어쓸(override) 수 있으므로, 자신만의 바인딩을 정의할 때는 이 점을 염두에 두어야 합니다.
  • 키 바인딩을 실제로 적용하려면 새 셸 인스턴스를 시작해야 합니다. .inputrc 파일은 셸이 시작될 때 읽혀지기 때문입니다.

함수(Function) 바인딩하기

키 조합이 실행될 때 특정 함수를 호출하도록 바인딩할 수도 있습니다. Readline은 선택할 수 있는 다양한 사전 정의 함수(pre-defined function)를 제공합니다. 키 조합을 사전 정의 함수에 매핑하는 형식은 다음과 같습니다.

<키 조합>: <함수 이름>

사용 가능한 사전 정의 함수의 전체 목록은 GNU Readline 매뉴얼에서 확인할 수 있습니다.

물론 직접 사용자 지정 함수를 만드는 것도 가능하지만, 이는 C 언어로 작성해야 하므로 이 글의 범위를 벗어납니다. 추후 별도의 튜토리얼로 다룰 예정입니다.

유용한 예시: menu-complete

여러 사전 정의 함수 중에서 menu-complete는 특히 유용하게 활용할 수 있습니다. 이 함수는 기존의 자동 완성과는 다른 동작 방식을 제공합니다.

TAB 키에 매핑된 기본 자동 완성 동작은 다음 중 하나입니다.

  • 일치하는 항목이 하나뿐이라면, 부분적으로 입력된 명령어·디렉터리·파일 이름을 즉시 완성합니다.
  • 일치하는 항목이 여러 개라면, 가능한 후보 목록을 화면에 표시합니다.

반면 menu-complete는 일치하는 후보 목록을 순환(cycle)하며, 함수가 호출될 때마다 다음 후보를 차례대로 채워 넣습니다. 이 방식은 특히 긴 파일 이름을 자동 완성할 때 매우 편리합니다. TAB 키를 이 방식으로 재매핑하려면 .inputrc 파일에 다음 줄을 추가하세요.

TAB: menu-complete

단, 새로운 키 바인딩은 현재 실행 중인 셸에는 적용되지 않습니다. .inputrc 설정 파일을 다시 불러오도록 새 셸 인스턴스를 시작해야 한다는 점에 유의하세요.

마무리

이번 튜토리얼에서는 리눅스 명령줄의 키 바인딩이 Readline이라는 도구에 의해 구동된다는 점을 살펴보았습니다. 키 바인딩은 다음 두 가지 유형 중 하나입니다.

  • 매크로(Macro): 문자열 시퀀스를 확장(삽입)합니다.
  • 함수(Function): 특정 동작을 수행합니다.

Readline은 기본 키 바인딩 세트를 제공하는 동시에, .inputrc 설정 파일을 통해 자신만의 바인딩을 만들 수 있는 유연성도 함께 제공합니다. 마지막으로, 현재 설정된 모든 키 바인딩을 확인하고 싶다면 bind 명령어를 사용하면 됩니다.

bind -p