vim 에서 블럭 주석처리 매크로
visual block을 설정해서 주석으로 만드는 게 emacs에선 참 쉽더군요.
그런데 vi에서는 잘 못 찾아서 불만이었습니다. 몇몇 매크로나 함수들이 있긴 한데, 라인 단위로는 되지만 블럭 단위로-라인 중간에 끝나도- 되는 경우는 없는 것 같았습니다.
그래서 c 전용으로 허접하게 짠 매크로로 버텨오다가 오늘 버그 픽스를 해서 필요하신 분들이 있을까 해서 올립니다.
---수정---
더 쉬운 방법을 찾아서 내용을 추가합니다.
밑에 함수를 사용한 버전보다 간단하고 잘 동작하며, block을 yank하지 않기 때문에 복사해뒀던 내용이 바뀌지 않습니다.
(<ESC>로 ctrl+v 입력후 esc 입력보다 더 쉽게 표현할 수 있어서 다시 수정합니다.)
" block comment vm <ESC>c <ESC>`>a */<ESC>`<i/* <ESC>`< " line commentify nm <ESC>c ^i/* <ESC>$a */<ESC>^
gvim에서는 alt가 저렇게 안먹을 겁니다. 아래와 같이 gvimrc에 넣어 주시면 됩니다.
vm <M-c> <ESC>`>a */<ESC>`<i/* <ESC>`< nm <M-c> ^i/* <ESC>$a */<ESC>^
---------------------------------------
vimrc에 다음을 추가하시면 됩니다.
function MySetCursor() let s_len = strlen(@@) let line_c = 0 let idx = stridx(@@, "\n") let str = @@ while idx >= 0 let line_c = line_c + 1 let s_len = strlen(str) let str = strpart( str, idx+1 ) let idx = stridx(str, "\n") endwhile echo line_c let Myl=line(".") if strlen(str) == 0 let line_c = line_c - 1 let Myc= s_len else let Myc= strlen(str) endif if line_c == 0 let Myc = col(".") + Myc + 3 " /* endif call cursor(Myl+line_c, Myc) echo Myc endfunction vm ^[c y^[i/* ^[:call MySetCursor()^Ma */^[
vm 부분은 ^[이 ctrl+v 입력후 esc키, ^M은 ctrl+v 입력후 엔터 임을 주지.
ALT-c를 누르면 설정한 블럭이 /* */ 주석 처리 됩니다.
원리는 사람이 입력하는 대로 따라했습니다.
블럭 설정한 것의 길이를 알기 위해 일단 yank 하고 먼저 /* 입력,
yank한 레지스터로 부터 길이를 알아내서 커서를 옮기고(라인과 컬럼)
뒤에 */ 입력 입니다.
yank를 한번 하기 때문에 레지스터 내용이 바뀜을 주의하세요.
참고로 블럭 모드 아닐 때 한 라인을 주석 처리하려면 다음 맵으로 됩니다.
nm ^[c ^v$hda/* */^[hhhp
역시 ^[이 ctrl+v 입력후 esc키 임을 주지하세요.
첨부 | 파일 크기 |
---|---|
visual_comment1.jpg | 43.05 KB |
visual_comment0.jpg | 43.53 KB |
EnhancedCommentify 라는 플러그인은 라인별로 /* */ 처
EnhancedCommentify 라는 플러그인은 라인별로 /* */ 처리를 해줍니다.
http://vim.sourceforge.net/scripts/script.php?script_id=23
----
I think, therefore I am.
라인별로 해주는 것이 더 정확해 보입니다.Ctrl+V 로 블럭을 지정
라인별로 해주는 것이 더 정확해 보입니다.
Ctrl+V 로 블럭을 지정해 준다면 라인별로 주석처리를 해줘야 제대로 되지 않나 싶네요.
제가 필요한 것은 라인 단위로가 아니라 라인 중간에서 시작해서 중간에 끝
제가 필요한 것은 라인 단위로가 아니라 라인 중간에서 시작해서 중간에 끝나게 블럭 잡으면 그 블럭만 주석처리하는 겁니다. 그런 게 필요한 때가 있더군요. ansi 형태로만 주석 쓸 수 있는데 같은 줄에 이미 주석이 하나 있는 경우 등요.
그럴 때 쓸 수 있는 매크로입니다.
EnhancedCommentify 는 써보았습니다만 그런 기능이 없었습니다. 라인단위로만 쓰시려면야 그걸 쓰시면 되겠습니다.
rommance.net
주제와 약간 안맞는 이야기입니다만, 저의 경우는에는 라인별로 코멘트 지정
주제와 약간 안맞는 이야기입니다만, 저의 경우는에는 라인별로 코멘트 지정할때 이렇게 합니다.
일단 V 눌러서 줄 비주얼 모드로 들어가서 지정해놓고,
:norm i//
이렇게 칩니다.
해제할때는
:norm xx
----
블로그 / 위키 / 리눅스 스크린샷 갤러리
더 쉬운 매크로를 찾았습니다. 커서 이동이 키 두개로 쉽게 되네요.[
더 쉬운 매크로를 찾았습니다. 커서 이동이 키 두개로 쉽게 되네요.
vm ^[c ^[`>a */^[`<i/* ^[`<
^[이 ctrl+v 후에 esc입니다.
rommance.net
^[c가 ALT-C를 의미하나요? 그것 때문인지 gvim에선 안되는군요.
^[c가 ALT-C를 의미하나요? 그것 때문인지 gvim에선 안되는군요. :]
vim에선 잘 되구요.
uncomment 기능도 있으면 좋겠습니다.
----------------------------
May the F/OSS be with you..
[quote="hey"]^[c가 ALT-C를 의미하나요? 그것 때문인지
rommance.net
cursor 함수가 없다고 하네요..
위의 함수을 실행 시커보니까..
주석이 되는데 처음 주석(/*) 만 되고 끝 주석(*/)은 되지가 안네요
에러가 뜨는데 cursor 함수가 undefine function 이다고 하네요
솔라리스 8에서 테스트 해보았습니다.
좋은 하루 보내세요
[quote="ham"]위의 함수을 실행 시커보니까..주석이 되는데
제가 나중에 올린
vm ^[c ^[`>a */^[`<i/* ^[`<
로 해보세요. 어쩌면 이걸로는 잘 될 지도 모르겠습니다.
이건 함수를 안쓰고 `> , `< 키를 쓰는 건데 visual 선택 영역의 처음, 끝으로 가는 겁니다. 역시 vi에선 안되고 vim에서 지원되는 걸로 기억하네요.
rommance.net
[quote="hey"]^[c가 ALT-C를 의미하나요? 그것 때문인지
저 같은 경우는
[quote="깊은바다"][quote="hey"]^[c가 ALT-C를 의
vm <M-c> ^[`>a */^[`<i/* ^[`< nm <M-c> ^i/* ^[$a */^[^
이렇게 하시면 됩니다. ^[은 역시 Ctrl+v 후에 esc입니다. 디폴트로 까셨다면 C:\Vim 아래에 _vimrc에 추가하시면 됩니다.[/geshifilter-c]rommance.net
vim에서 좀더 보기 쉽게 정의 하기
^[ 가 Ctrl+V 후 Esc 인거군요
해보면 Esc키를 입력한 것으로 작동하는데 <Esc>를 써도 될 것같습니다.
<F1>이 F1키, <Esc>가 Esc 키, <C->가 Ctrl + ,
그냥 입력하면 되고 이해하기도 더 쉽지 않을까요?
ESC가 있는 줄 몰랐네요. 그렇게 쓰면 되겠습니다.사실은 Alt-C
ESC가 있는 줄 몰랐네요. 그렇게 쓰면 되겠습니다.
사실은 Alt-C를 입력하려고 ctrl+v후에 alt+C를 눌렀더니 ^[c저렇게 입력되더군요.
rommance.net
댓글 달기