##유용한 여러가지 기능 ##모든 단축키 보기(매핑 리스트) :map ##여러가지 변수 값을 출력하기 변수명 뒤에 `?` 기호를 붙여서 내용을 출력할 수 있다. 예 :set filetype? :set path? :set tabstop? ##이전 위치로 커서를 이동 `. ##chage list간에 커서 이동 change list에서 N 만큼 더 오래된 위치로 커서를 이동 [N]g; chnage list에서 N 만큼 더 새로운 위치로 커서를 이동 [n]g, change list를 출력한다. :changes ##jump list간에 커서 이동 jump list에서 N 만큼 더 오래된 위치로 커서를 이동 [N]-O jump list에서 N 만큼 더 새오룬 위치로 커서를 이동 [N]-I jump list를 출력한다 :ju[mps] ##줄 전체 이동 `:m` 명령은 원하는 줄을 이동시킨다. * `:m +1`: 현재 커서의 줄을 1줄 아래로 이동 * `m -2`: 2 현재 커서의 줄을 1줄(2-1줄) 위로 이동 * `m 3`: 현재 커서의 줄을 3행 다음으로 이동. + 혹은 - 기호 없이 사용하면 문서내의 특정 줄로 이동한다. `v` 혹은 `+v`(한 줄 선택)로 여러 줄을 선택한 후 `:m` 명령을 내리면 여러 줄을 한번에 이동 시킬 수 있다. ##textwidth를 지정하여 자동으로 개행 문자 삽입 on/off textwidth를 설정하면 자동으로 입력위치가 설정 값을 넘어가면 자동으로 개행문자를 삽입한다. :set textwidth=0 :set wrapmargin=0 ###공백 문자의 표시 on/off :set list :set nolist 공백 문자를 표시할 문자를 지정하려면 :set listchars=... :set listchars=eol:$,tab:>-,trail:~,extends:>,precedes:< ###행번호 on/off :set nu[mber] :set nonu[mber] ###취소하기 `u` ###이전작업 다시 실행 `.` *Tip:* `"1pu.u.u.` : 레지스터에 있는 최근 내용부터 하나씩 되돌리면서 붙여넣는다. 설명: `"1p`는 1번 레지스터의 내용을 붙여넣는다. `u`는 되돌리기 명령이다. 그리고 `.` 명령은 바로 이전에 했던 작업을 반복하는 명령이다. ###파일탐색 * explorer 플러그인 실행: `:20vs .` vs는 vertical split이고 20은 창의 크기를 의미한다. * NERDTree 플러그인 실행: `:NERDTree` ###빠른 괄호 이동 여는 괄호 혹은 닫는 괄호에 커서를 놓고 `%` 키를 누르면 괄호 쌍으로 이동한다. ###빠른 탐색 찾는 단어에 커서를 두고 `*` 키나 `#` 키를 누르면 커서에 위치한 단어와 같은 문자열을 찾아서 다음위치 혹은 이전 위치로 이동한다. 이는 /[찾으려는 문자열] 혹은 ?[찾으려는 문자열] 명령과 같은 기능을 한다. ###블록 선택 * '{}' 영역을 블록 선택: 표준모드에서 `{`위에 커서를 위치 시킨 후 `v]}` 키를 누른다. ###폴딩 기능 이용하기 * 블록을 폴딩하기: 블록으로 영역을 선택을 한 후 `zf` 키를 누른다. * `{}` 블록을 폴딩하기: 표준모드에서 `{`위에 커서를 위치 시킨 후 `v]}zf` 키를 누른다. `v]}`은 괄호 쌍에 대한 블록을 지정하는 기능이다. * 언폴딩: 접힌 부분에서 `??` 혹은 `zo`를 누른다. `~/.vimrc`에서 단축키 설정 "folding map v]}zf "unfolding map zo ###함수의 원형 간단 확인 단축키 *see* ctags 사용하기: [ctags.md](#file-ctags-md) ###지역변수의 선언 부분으로 이동 단축키 *see* ctags 사용하기: [ctags.md](#file-ctags-md) ##(여러 행에) 탭을 일괄적으로 삽입 제거 하기 [N]>> 또는 [N]<< 블록을 지정하고 `>` 혹은 `<` 키를 쳐도 위와 같게 작동한다. ##탭 사이즈 조정하기 * ts(tabstop): 문서 내의 '\t' 문자를 몇 칸으로 보여줄지를 정한다--number of spaces a `` in the text stands for `:set ts=8` * sw(shiftwidth): >> 혹은 << 키로 탭 사이즈를 조절할 때, 자동 줄 맞추기시 들여쓰기 시 사용되는 칸 수이다--number of spaces used for each step of (auto)indent `:set sw=2` * sts(softtabstop): Tab 키를 눌렀을 때 표시되는 간격을 정한다--if non-zero, number of spaces to insert for a `:set sts=0` * et(expandtab): 탭키를 눌렀을 때 스페이스로 확장할 지 아니면 '\t'로 확장할 지를 결정--expand to spaces in Insert mode `:set noet` `:set et` ###소스 정렬 하기 ###블록의 소스 정렬 블록을 지정한 후 `=` 키를 누른다. ###블록없이 소스 전체를 정렬 gg=G ###`^M` 문자: Window 시스템의 개행문자 윈도우 시스템의 개행문자(\r\n)를 Unix형식(\n)으로 변경하기 ####fileformat변경 :set fileformat==dos ####치환명령 :%s/^M//g 여기서 `^M`을 직접입력하는 것이 아니라 `+v`키를 누른다. *참고:* * `^[` : `+v` 키 * `^[[11~` : `+v` 키 * `^[[12~` : `+v` 키 ###현재 커서 위치의 단어의 삽입 ####명령창 * `+R +W`: 현재 커서 위치의 단어를 명령창에 넣는다. 도움말 `:help c_CTRL-R` * nmap: 단축키 설정 예: `nmap ,st :call Sts()` ####내장 스크립트 함수 * ``: 현재 커서 위치의 단어 * `expand("")`: ? ###파일비교 명령창에서 $ vimdiff copying copying.org * [sample-copying](#file-sample-copying) * [sample-copying.org](#file-sample-copying-org) 혹은 vim내에서 쉘명령 수행을 통해 meld등을 수행한다. ###커서 위치의 파일 열기 우선 `vim`이 파일을 열수 있는 폴더의 위치를 `path` 변수에 지정해야한다. `.vimrc`에 지정한다. 예 set path=/usr/local/lib/node\_modules:/usr/include:~/projects/example1 `vim` 내에서 열려는 파일명이 있는 곳에 커서를 위치시킨 후 `+wf`를 입력하면 수평 분할이 되면서 파일이 열린다. ###단어자동완성 `+p`: 커서의 위치에서 위로 검색, 코딩을 할 때 유요함. `+n`: 커서의 위치에서 아래로 검색