콘텐츠로 건너뛰기
Home » vim » Page 3

vim

(Vim) 필요없는 공백제거하기

왠만한 편집기들은 파일을 저장하기 전에 각 라인의 뒤에 들어있는 쓸데없는 공백들을 제거해주는 기능을 제공한다. (이러한 trailing space들의 해악에 대해서는 따로 말할 필요가 없을 것 같다.) 물론 vim에서도 이걸 사용할 수 있다. :s 명령을 사용하면 각 줄에서 맨 뒤쪽 공백을 제거할 수 있다.

:%s/\s\+$//

간단히 설명하면 이 명령은 다음과 같이 동작한다.

더 보기 »(Vim) 필요없는 공백제거하기

VIM의 내장 자동완성 사용하기

vim은 단순한 텍스트나 설정 파일을 편집하는데 사용할 수도 있지만, 아주 오랜 역사에서 코드 에디터로 발전하며 여러 가지 기능들을 제공하고 있습니다 코드 에디터에서 가장 기본적으로 제공해야 하는 기능에서는 자동완성을 빼 놓을 수 없습니다. 물론 문맥에 맞는 자동완성 키워드를 추천해주는 vim 플러그인도 많이 있지만, 기본적으로 이러한 플러그인들 역시 vim의 내장 자동완성을 함께 사용하고 있는 경우가 많습니다. 즉, vim은 순정상태(?)에서도 기본적인 키워드 자동완성 기능은 제공할 수 있습니다. vim에서 자동완성을 사용하는 가장 기본적인 방법은 키워드의 앞 한 두 글자를 입력한 후 <C-N>(Ctrl + N)을… 더 보기 »VIM의 내장 자동완성 사용하기

Vim – 레지스터에 관해

Vim에서 문자열을 복사하는 동작을 지칭할 때 흔히 copy라는 단어 대신에 yank라는 단어를 사용한다. vim의 전신인 vi가 개발되던 때에는 OS의 사용환경이 터미널이었으며, 이 때에는 클립보드라는 개념이 없었기 때문에, 어떤 데이터를 임시로 복사했다가 다른 곳에 옮기는 것은 응용 프로그램이 사용하는 메모리의 특정 영역을 사용했고, 이 당시에는 ‘copy’라는 단어는 복사본을 만드는 것이지 지금처럼 클립보드에 데이터를 넣어두는 개념이 아니었기 때문이다.

Vim은 내부에서 임시로 복사해두는 메모리 영역을 하나가 아니라 여러 개를 사용하며, 이는 CPU의 기억장치와 같이 “레지스터”라는 이름으로 부른다. 이 레지스터들은 알파벳이름과 숫자 그리고 몇 가지 기호로 이름이 붙은 여러 개가 존재하는데, 보통 알파벳 이름의 레지스터는 사용자가 임의로 사용할 수 있으며, 숫자와 기호로 이름이 붙은 레지스터들은 특정한 동작이 발생할 때 변경된 데이터가 자동으로 임시로 보관되는 영역으로 사용된다.

더 보기 »Vim – 레지스터에 관해

열려진 모든 파일에서 문자열 찾기 – Vim

:bufdo 명령

:bufdo는 버퍼 리스트의 모든 버퍼에 대해서 동일한 명령을 반복 수행하는 기능으로, 찾기/바꾸기 외에도 어떤 명령이든 여러 파일에 대해서 한꺼번에 적용하는 기능을 제공한다. 참고로 :silent 처럼 문자열이 아닌 일반 명령 시퀀스가 뒤에 오게 된다. 예를 들어 vim에서 열어놓은 모든 버퍼에서 ‘sample’ 이라는 단어를 ‘fixed’라고 변경하려면, 모든 버퍼를 일일이 옮겨다닐 필요 없이 다음과 같이 :bufdo %s/sample/fixed/g를 실행하면 된다.

이와 비슷하게 모든 창에 대해서 동일한 명령을 반복하거나, 탭 단위로 반복할 수 있다. :windo 명령은 모든 창에 대해서 적용되며, (따라서 창에서 보이지 않는 버퍼에 대해서는 실행되지 않는다.) :tabdo 은 모든 탭에서 실행된다.

더 보기 »열려진 모든 파일에서 문자열 찾기 – Vim

컬러스킴을 전환하기

vim에서 컬러 스킴을 변경하고 싶을 때에 :colorscheme 명령을 사용한다. (줄여서 :color로 쓸 수 있다.) 이 명령으로 컬러 스킴을 변경할 때에는 테마 이름을 알아야 하는데, 사실 몰라도 상관없다. :color<space> 한 후에 탭 키를 누르면 테마 이름은 자동완성되기 때문이다. 근데 이것보다도 키 하나만 눌러서 다른 테마로 적용되는 것을 보면서 전환하도록 하는 것이 더 편리할 것 같다. 이 기능을 vim 안에서 어떻게 만들면 좋을지 알아보자.

더 보기 »컬러스킴을 전환하기

jump 관련 명령 정리 – vim

vim에서 h,j,k,l 명령에만 익숙해지는 것도 사실 쉽지 않고, 일단 익숙해지면 이 키들을 연타하는 식으로 커서를 움직이는데, 특정한 위치로 바로 이동할 수 있는 jump관련 명령이 손에 익으면 그만큼 편리할 수가 없더라. jump와 관련된 명령들을 한 번은 정리하고 가자.

마커

m을 이용해서 현재 위치를 특정한 마커로 지정할 수 있고, 백팃 ` 이나 '작은 따옴표를 이용해서 그 위치로 되돌아 갈 수 있다. 보통 마크는 a-z, A-Z, 0-9 와 몇 가지 특수문자가 적용되는데, 특수문자들은 특별한 의미를 가지는 것들이다. 다음은 vim에서 사용되는 마커의 특징이다. 이 중에서 사용자가 임의로 설정할 수 있는 마커는 0-9,a-z,A-Z 이며, 이 각각은 문자의 종류에 따라 또 의미가 조금씩 다르다. 그 외에 편집/선택과 관련하여 특징적인 마커가 있으니 살펴봐두자.

  • a-z 영어 소문자는 일반적인 마크. 파일마다 따로 관리된다.
  • A-Z는 여러 파일간에 유지된다.
  • 0-9는 역시 여러 파일간에 유지되는데 … .viminfo 파일 내에 저장된다고 한다. 따라서 vim을 종료/재시작한 후에도 위치를 기억할 수 있다. (실제로 이는 vim을 빠져나갔을 때 위치를 기억한다고 한다.)
  • < > 는 이전 선택 영역의 처음과 끝을 가리킨다.
  • " 는 최종적으로 수정한 위치를 가리킨다.
  • ' 는 점프하기 이전 위치로 돌아간다.
  • ^는 삽입모드가 최종적으로 종료된 위치로 돌아간다.
  • .은 최종 변경이 시작된 위치이다.
  • [ ] 는 최종적으로 수정한 영역의 처음과 끝을 가리킨다.

:marks를 사용하면 현재 이동할 수 있는 마크들을 보여준다.더 보기 »jump 관련 명령 정리 – vim

스크립트에서 파일명 확장 – vim

vim 명령줄 모드에서 %는 보통 현재 파일의 전체 범위1나 현재 파일 이름의 의미가 된다. 예를 들어 C 파일을 작성하던 중에 현재 파일을 컴파일하고 싶다면 :!gcc -c % 라고 할 수 있다. 그렇다면 함수와 같은 스크립트 문맥에서는 어떨까? 스크립트 문맥에서는 파일명확장이 이루어지지 않고, 대신에 expand()함수를 써서 수동으로 처리해야 한다. let current_file_name = expand('%') let current_file_prefix = expand('%<') 그외 몇 가지 옵션이 있는데 이는 :h expand()로 찾아보면 된다. % : 현재 파일이름 # : 대체 이름 (아마 이전 파일?) #n : 대체이름… 더 보기 »스크립트에서 파일명 확장 – vim

SCSS 파일을 자동으로 컴파일하게 하기 – vim

scss 파일을 저장할 때 자동으로 컴파일 해주는 기능을 만들어보자. 이런 종류의 기능은 보통 vim의 autocmd나 키맵 등을 설정하여 만들 수 있다. 오토 커맨드로 등록하는 경우, 특정한 패턴의 파일을 열거나, 파일을 새로 만들거나, 저장하는 전후 등의 시점에 자동으로 수행될 수 있다. SCSS 컴파일은 외부 컴파일러에 의존하고 있다. 따라서 vim 내에서 실행하면 해당 프로그램이 실행되는 동안 vim은 해당 프로세스가 종료되기를 기다리면서 동작을 멈추게 된다. 비록 짧은 시간이기는 하지만 이 과정이 제법 신경쓰일 수 있다. 그런데 vim8부터는 비동기로 이런 작업을 처리할 수 있는… 더 보기 »SCSS 파일을 자동으로 컴파일하게 하기 – vim

Vim – 사용자 정의 명령을 만드는 방법

vim의 명령모드에서 입력하여 실행하는 명령들을 “Ex명령”이라고 한다. 주로 :가 앞에 붙는 명령들이 여기에 해당하며, vimscript 함수와는 별개로 작동한다. (vimscript 함수들은 엄밀히 말해 :call 명령의 인자로 전달받는 값이 되는 것이다.)

:command 명령을 사용하면 사용자가 직접 원하는 동작을 수행하는 명령을 새로 정의하여 사용할 수 있다. 간단한 예로 다음 명령은 vim 파일을 편집할 때, 현재 파일을 저장하고 vim 스크립트를 로드하는 사용자 정의 Ex명령을 생성한다.

더 보기 »Vim – 사용자 정의 명령을 만드는 방법

vim : 단어 및 선택 영역을 둘러싸기

Surround.vim이라는 멋진 플러그인이 있기는 하지만, 개인적으로는 vimrc에 오랫동안 넣고 쓰던 코드

기본원리

기본원리는 매우 간단한데, 괄호 등으로 감싸고자 하는 단어를 선택영역으로 만든 다음, 선택 영역을 해제하고, 이 영역의 마지막과 끝 영역으로 이동해서 괄호짝을 삽입해주면 된다.

  1. viw: 현재 단어 선택
  2. <esc>: 단어 선택 취소
  3. \>`: 마지막 선택영역의 끝으로 이동
  4. a)<esc>: 선택영역 뒤에 닫는 괄호 추가
  5. \<`: 선택영역의 시작지점으로 이동
  6. i(<esc>: 여는 괄호 삽입
  7. \>ll`: 두 글자가 추가되었으므로 다시 단어 끝부분을 이동하여 오른쪽으로 두 칸 이동

더 보기 »vim : 단어 및 선택 영역을 둘러싸기