Liemani

blog

홈으로

사례로 배우는 cli 라인 편집

October 09, 2021

아주 긴 경로에 대한 작업을 할 때, 가령 아래와 같은 명령을 입력할 수 있다.

% diff $git/lmt_c_library/contents/lmt_primitive_type/lmt_primitive_type.h lmt_primitive_type.h

나는 diff 명령어로 두 파일 $git/lmt_c_library/contents/lmt_primitive_type/lmt_primitive_type.hlmt_primitive_type.h 의 차이를 보고 싶었다. 그리고 이 명령어의 결과를 보고 앞의 파일이 최신 파일이라는 것을 알게 되었다. 그래서 앞의 파일을 복사하여 뒤의 파일에 덮어쓰고 싶다. 이를 위해서는 다음과 같은 명령을 입력해야 할 것이다.

% cp $git/lmt_c_library/contents/lmt_primitive_type/lmt_primitive_type.h lmt_primitive_type.h

이 경우 이전 라인과 인자 두 개가 완전 동일하다. 그래서 일일이 입력하지 않고도 몇가지 단축키를 통해 제일 앞의 명령어만 빠르게 교체하면 된다.

  1. 우선 <C-P>[주석:1] 나 위 방향 화살표 키를 눌러서 히스토리(history) 에 저장된 가장 최근 명령을 불러온다.
  2. 커서를 제일 앞으로 옮기기 위해 <C-A> 를 누른다.
  3. 명령어가 짧다면 del 키나 <C-D> 로 커서에 위치한 단어를 지울 수 있다.
  4. 명령어가 길다면(혹은 짧아도) <M-D>[주석:2] 로 커서를 포함한 한 단어(word)[주석:3] 를 지울 수 있다.

만약 두 인자의 순서를 바꾸고 싶다면 어떻게 하면 편할까?

  1. 우선 커서를 제일 뒤로 옮기자. 만약 명령 라인 도중 어딘가에 있다면 <C-E> 로 커서를 라인 제일 뒤로 옮겨 준다.
  2. 커서를 제일 뒤로 옮겼다면 <C-W> 로 커서 앞의 단어를 삭제하자. 이 때 삭제된 문자열은 동시에 임시 버퍼에 자동으로 저장된다.
  3. 이제 임시 버퍼에 저장된 두번째 인자를 첫 번째 인자 위치에 붙여넣어주기 위해 명령어 바로 뒤로 커서를 옮겨야 한다.
  4. <M-B> 로 현재 커서가 위치한 단어의 첫 문자로 커서를 옮겨준다.
  5. <C-Y> 로 임시 버퍼에 저장되어 있던 두 번째 인자를 붙여넣어주고, 만약 space 가 필요하다면 하나 넣어주자.
% cp lmt_primitive_type.h $git/lmt_c_library/contents/lmt_primitive_type/lmt_primitive_type.h

[1] <C-P> 는 vim 에서 키 조합을 표현하는 방법이다. ctrl + p 를 의미한다.
[2] <M-D>meta key + d 를 의미한다. meta key 는 mac terminal app 에서는 꺼짐이 기본값이다. 이를 활성화하기 위해서는 terminal app 의 환경 설정(command + ,) 에서 Profiles > Keyboard > Use Option as Meta key 의 체크 박스를 체크하면 된다. 기능의 label 을 읽고 알 수 있듯이 option + 문자 단축키가 활성화 된다. 이제 option + d<M-D> 단축키 기능을 사용할 수 있다. windows 에서 meta 키는 alt 키이다.
[3] cli 에서는 line 을 몇 개의 정해진 whitespace character 로 나누고 각각을 단어(word) 라고 한다.
[4] 나는 이 단축키가 처음에 조금 헷갈렸다. C, M, S 등 첫 문자를 보조 키(modifier key) 라고 하고, 두 번째로 표기하는 문자를 조합키라고 하는데, 조합키는 대문자처럼 shift 와 함께 눌렀을 때 입력되는 문자로 표기하는 문화가 있는 모양이다. 즉, <C-_> 는 실제로 ctrl + - 를 의미한다.