8. 고급 키보드 기법

키보드를 더 빠르고 효율적으로 사용할 수 있는 bash 기능을 살펴본다.

커맨드라인 편집

bash는 Readline이라고 하는 라이브러리를 사용한다.

커서 이동

실행
ctrl + a(head) 줄 맨 앞으로 커서 이동
ctrl + e(nd) 줄 맨 끝으로 커서 이동
ctrl + f(oward) 다음 한 글자로 커서 이동 (오른쪽 화살키와 동일)
ctrl + b(ackward) 이전 한 글자로 커서 이동 (왼쪽 화살키와 동일)
alt + f / Mac : alt + 오른쪽 화살키 다음 한 단어로 커서 이동
alt + b / Mac : alt + 왼쪽 화실키 이전 한 단어로 커서 이동
ctrl + L 화면을 지우고 커서를 왼쪽 최상단으로 이동 (clear 명령어와 동일)

메타 키(Meta Key)

Readline 개발자들은 기타 여분의 컨트롤 전용키가 있는지 확신할 수 없었기 때문에 메타(meta)라는 새로운 키를 만들어냈다.

맥에서는 ESC가 메타키를 대신하고 있다. 이 설정은 preferences -profile - keys에서 변경할 수 있다.

텍스트 수정

Readline 문서는 Killing(텍스트 지우기)와 Yanking(텍스트 복사하기)라는 용어를 사용하는데 각각 의미하는 바는 잘라내기와 붙이기로 흔히 불린다. 잘라낸 데이터는 kill-ring이라고 하는 버퍼에 저장된다.

실행
ctrl + k 현재 커서 위치로부터 그 줄 끝 부분까지 텍스트 지우기
alt + d 현재 커서 위치에서부터 그 단어 끝 부분까지 텍스트 지우기
ctrl + y kill-ring에 있는 텍스트를 복사해서 현재 커서 위치에 삽입

자동 완성

명령어를 입력하는 동안 탭키를 누르면 자동 완성 기능이 작동한다.

자동완성은 경로명 뿐만 아니라 변수(단어 시작이 $ 기호), 사용자명(~ 기호로 시작), 명령어, 호스트명(@ 기호로 시작)에도 사용될 수 있다.

히스토리 활용

히스토리 검색

$ history | less

$ history | grep /usr/bin
  101  vi /usr/bin/env

# 히스토리 확장
$ !101
$ vi /usr/bin/env

히스토리 확장

쉘은 ! 기호를 사용해서 히스토리 목록에 있는 항목들에 특수한 형식의 확장을 지원한다.

시퀀스 실행
!! 마지막 명령어를 반복하여 실행
!number number에 해당하는 항목을 실행
!string string로 시작하는 가장 최근에 입력된 항목을 실행
!?string string이 포함된 가장 최근 입력된 항목을 실행
$ !!
$ git push -u origin master

$ !pyenv
$ pyenv local introducing_python

$ !?virtualenv
$ pyenv virtualenv 3.6.0 introducing_python