[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)

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

  • 환상경

    HTML같은경우는 zencoding이라는 플러그인을 사용해보세요

    • 매번 좋은 정보 감사합니다 ㅎㅎ 최소 10년은 전에 만들어진 웹페이지(나모 혹은프론트페이지로 만들어졌을법한)를 새로 만들어야 하는데, 코드가 너무 지저분해서 내용만 가져와서 새로 마크업을 만들거나, 모든 속성값들을 삭제하거나 하는 등의 작업을 해야 했는데, 덕분에 며칠사이 vim 스크립트 공부 많이 하게 되는 것 같습니다.