[vim] 유용한 팁

Linux 2015. 5. 25. 16:25




http://xmodulo.com/useful-vim-commands.html

내용을 그대로 옮긴다.






1. 저장하고 나가기

저장하고 종료는 :wq 대신 :x 로 할 수 있다.


2. 계산기

입력모드에서 ctrl+R 하고 =2+2 같은 형식으로 계산결과를 바로 입력할 수 있다.


3. 중복 찾기

vim으로 정신 빼놓고 편집하다가 단축키를 잘못 누르거나 해서 단어가 여러개 복사되거나 하는 경우가 있다.

그자리에서 발견해서 수정하면 좋은데 그게 안되어서 그냥 남았을 경우 나중에 곤란해지므로 정규식으로 중복단어를 찾아내는 방법이 있다.

명령모드에서 / 로 검색모드로 만든다음 아래 정규식을 입력하면 연속된 중복단어를 찾아준다.

\(\<\w\+\>\)\_s*\1


4. 약어 (abbreviation)

약어와 그에 해당하는 문자열을 미리 등록해놓고 입력모드에서 약어가 입력되면 해당하는 문자열이 입력되게 만드는 기능이 있다. 자주 쓰는 문자열을 약어로 등록해놓고 쓰니 상당히 편하다.

명령모드에서 아래처럼 :ab(abbreviation)로 등록하고,

:ab instdio #include <stdio.h>

입력모드에서 instdio 라고 입력하면 자동으로 #include <stdio.h> 로 변환되어 입력된다.


여러 줄을 입력하려면 new line 부분에 <CR>을 입력해주면 된다.

아래는 php 실행 스크립트를 등록하는 예제이다.

:ab phpscript #!/usr/local/bin/php<CR><?PHP<CR>ini_set('memory_limit', -1);<CR><CR>


위처럼 등록해놓고 입력모드에서 phpscript 라고 입력하면 아래처럼 출력된다.

#!/usr/local/bin/php

<?PHP

ini_set('memory_limit', -1);




등록된 약어를 보고 싶으면 명령모드에서 그냥 :ab 만 입력하면 되고,

등록된 약어를 지우고 싶으면 명령모드에서 :abc 라고 입력하면 된다.


5. 저장권한

w 권한이 없는 파일을 열었다가 수정을 신나게 하고 저장하려고 했더니 권한이 없어서 저장하지 못한다는 상황이 되었을 때,

그동안 수정한 걸 다 포기하고 권한이 있는 사용자로 다시 열어서 편집하거나,

화면을 스크롤 해가면서 어딘가에 저장해놓고 권한이 있는 사용자로 다시 여는 방법을 사용할 수 있을텐데,

그냥 sudo 를 이용하면 된다.

:w !sudo tee %



6. 편집중인 파일 암호화

vim으로 편집중인데 해당 문서를 보면 안되는 사람이 갑자기 뒤에 쓱 나타나거나 했을 경우,

편집하던 문자열 전체를 임시로 암호화 하는 방법이다.

명령모드에서 아래처럼 입력하면 된다.

ggg?G


gg 로 문서 맨 위로 커서를 올리고,

g? 로 암호화 한다고 선택한 다음

G 로 문서 맨 끝으로 커서를 옮기는 것.


다시 원상복구 하려면 그냥 간단하게 u 로 Undo해주면 된다.



7. 자동완성

입력모드에서 일부단어만 입력한 후 ctrl + n 누르면 자동완성 기능이 뜬다.

너무 간단해서 별 것 아닌 것 같은데 진짜 감동적인 기능이다...ㅠ_ㅠ




8. diff

vim으로도 diff 가능하다.

그냥 diff 결과만 보고 싶으면 diff 명령어로 해도 되지만, vim으로 하면 visual diff가 된다.

일단 기준되는 파일을 하나 열고,

명령모드에서 아래처럼 입력하여 비교할 파일을 연다.

:vsp 비교할_파일


그리고 ctrl+w 을 두 번 연속 입력하여 비교할 파일 쪽으로 커서를 옮긴다음,

명령모드에서 아래처럼 입력하면 visual diff 가 된다.

:diffthis


diff를 끄려면 :diffoff 명령을 입력하면 된다.

파일 3개 열어놓고 하면 3-way diff 하는 느낌도 난다..;




9. 시간을 지정하여 되돌아가기

:earlier 명령어를 이용하여 일반적인 undo 와는 다른 방식으로 되돌아가는 것이 가능하다.

// 직전 상태로 복귀

:earlier 

// N회 전 상태로 복귀

:earlier N

// N초 전 상태로 복귀

:earlier Ns

// N분 전 상태로 복귀

:earlier Nm

// N시간 전 상태로 복귀

:earlier Nh

// N일 전 상태로 복귀

:earlier Nd


정확히 반대로 먹히는 명령어는 :later 이다.




10. 마커 내부 삭제

아래 명령어로 괄호나 중괄호 등으로 감싸여진 부분 내부를 통째로 지우고 싶은 경우 사용할 수 있다.

di[marker]


예를 들어 아래와 같은 형태의 함수가 있을 경우,

function FUNC_NAME(int a, char b)

{

    log("this is log what i want to delete.");

    return a+ord(b);

}


매개변수 부분만 지우고 싶다면 첫번째 괄호 ( 에서 di( 라고 입력하면 되고,

함수내부를 통째로 지우고 싶다면 중괄호 { 에서 di{ 라고 입력하면 된다.

log() 함수 내부의 문자열을 지우고 싶다면 쌍따옴표 " 에서 di" 라고 입력하면 된다.




11. 특정 마커 앞까지 삭제

커서 위치부터 특정 마커 앞까지 삭제하려면 아래 명령어를 입력하면 된다.

dt[marker]


예를 들어 function FUNC(int a, char b, float c) 라고 되어 있는 부분에서 char b, float c 만 다른것으로 바꾸고 싶다면,

int a, 다음에 커서를 두고 dt) 라고 입력하면 char b, float c 를 지울 수 있다.





12. vim을 hex editor로 사용하기

아래 명령어를 입력하면 vim을 일반적인 hex editor 처럼 만들어 준다.

:%!xxd


일부 사람들에게 유용하게 사용할 수 있다.

다시 되돌리는 명령어는 %!xxd -r 이다.




13. 커서가 있는 라인을 화면의 중앙에 위치시키기

명령모드에서 zz 라고 입력하면 커서가 있는 라인이 화면의 중앙에 위치하게 된다.





14. 이전/다음 위치로 이동

저 아래에서 뭔가를 고치고 윗쪽으로 이동해서 소스코드를 보다가,

아차 싶어서 아까 수정하던 부분으로 다시 돌아가고 싶을 땐, Ctrl + o 를 입력해주면 된다.

그리고 다시 아까 보던 부분으로 돌아가고 싶으면 ctrl + i 를 입력해주면 된다.







Posted by bloodguy
,