vim 관련한 몇 가지 내용 정리
1. 선택된 텍스트로 검색하기
visual mode에서 선택 영역을 만들어서 이 단어를 검색하는 기능이 따로 없어서 은근 불편하더라. 매번 / 명령으로 검색하는 것도 귀찮고, 심지어 검색해야 하는 단어가 길기라도 하면…. 명령 프롬프트에 복사(yank)한 문자열을 붙여넣는 방법은 Ctrl – R 0 이라고한다. 따라서 다음과 같은 단축키를 만들면 된다.
vmap <C-G> y/<C-R>0<CR>
2. HTML 테이블 쉽게 만들기
반복되는 작업은 매크로를 사용해서 쉽게 단축할 수 있는 vi의 특성을 잘 살리면 HTML 테이블을 손쉽게 만드는 것쯤은 사실 간단하다. 대충 다음의 순서를 거치면 된다.
- :%s/^.*$/<td>&<\/td>/g 를 사용해서 모든 행의 앞/뒤에 <td>~</td>를 붙인다.
- 첫 행으로 가서(gg), 4Jj (혹은 한 행의 칼럼 수 만큼)를 하여 4개 td를 하나의 라인으로 병합한다.
- 2의 내용을 매크로로 만들어 준다. 뭐 라인수*4만큼 충분히 실행해준다.
- 다시 모든 라인에 대해 1.을 응용하여 <tr>~</tr>을 붙여준다.
- 첫행과 끝행을 추가해서 <table> ~ </table>을 달아준다.
셀의 수가 100개를 넘어가는 5열 테이블이라면 고작 20개 행이겠지만, 이걸 일일이 타이핑하려면 만만치 않은 분량이다. 게다가 치환작업을 여러 번 해야해서 좀 번거롭기도 하네. 그래서 다음과 같이 아예 함수로 만들어 버리도록 하자.
function! ChgEl(tagname) execute "normal gg" let cl = line('.') let hl = line('$') while cl < hl + 1 call setline('.', "<".a:tagname."> ".getline('.'). " </".a:tagname.">") let cl = cl + 1 + endwhile endfunction function! MkTable(span) call ChgEl("td") execute "normal gg" let cl = line('.') let hl = line('$') while cl < hl execute "normal ".a:span."J" + let cl = cl + 1 let hl = line('$') endwhile call ChgEl("tr") execute "normal ggO<table>\<ESC>Go</table>\<ESC>" endfunction
두 개의 함수를 작성했는데, 두 번째 함수는 테이블의 한 행에 몇 개의 열이 들어가지는 지를 입력받아 n 열짜리 테이블을 만들어 준다. 첫 번째 함수는 하나의 행을 TD, TR 태그로 둘러싸기 위해 만든 함수. 첫행에서 마지막행까지 모든 행에 대해서 반복해준다.
위 함수를 별도의 파일에 작성해서 .vim 확장자를 주고 저장한 다음, 불러다 쓸 때는 다음과 같이 한다.
:source {파일이름}.vim
:call MkTable(4)
다운로드는 여기서 하시라.