[vim] 몇 가지 팁 추가

vim 관련한 몇 가지 내용 정리

1. 선택된 텍스트로 검색하기

visual mode에서 선택 영역을 만들어서 이 단어를 검색하는 기능이 따로 없어서 은근 불편하더라. 매번 / 명령으로 검색하는 것도 귀찮고, 심지어 검색해야 하는 단어가 길기라도 하면…. 명령 프롬프트에 복사(yank)한 문자열을 붙여넣는 방법은 CtrlR 0 이라고한다. 따라서 다음과 같은 단축키를 만들면 된다.

vmap <C-G> y/<C-R>0<CR>

2. HTML 테이블 쉽게 만들기

반복되는 작업은 매크로를 사용해서 쉽게 단축할 수 있는 vi의 특성을 잘 살리면 HTML 테이블을 손쉽게 만드는 것쯤은 사실 간단하다. 대충 다음의 순서를 거치면 된다.

  1. :%s/^.*$/<td>&<\/td>/g 를 사용해서 모든 행의 앞/뒤에 <td>~</td>를 붙인다.
  2. 첫 행으로 가서(gg), 4Jj (혹은 한 행의 칼럼 수 만큼)를 하여 4개 td를 하나의 라인으로 병합한다.
  3. 2의 내용을 매크로로 만들어 준다. 뭐 라인수*4만큼 충분히 실행해준다.
  4. 다시 모든 라인에 대해 1.을 응용하여 <tr>~</tr>을 붙여준다.
  5. 첫행과 끝행을 추가해서 <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)

 다운로드는 여기서 하시라.