:global 명령

:global 혹은 :g 명령은 Ex 명령인 [cmd]를 전체 혹은 지정한 range 사이의 모든 라인에 중에서 패턴이 일치하는 라인에 대해 실행한다. 의외로 놓치고 활용을 많이 안하는 명령인데, 반복적인 편집 뿐만 아니라 조금만 연습하면 강력한 편집 기능을 구현할 수 있다. 또한 일상적으로는 잘 쓰이지 않는 일부 명령들을 조합하여 유용하게 사용하게 되기 때문에 편집 명령에 대해서도 공부할 수 있는 좋은 출발점이 된다.

:global 명령의 형식은 다음과 같다.

:[range]g[lobal]/{pattern}/[cmd]

사용예제

특정한 패턴에 매치하는 모든 라인을 삭제하는데, :global 명령이 적격이다. 라인을 지우는 명령은 d 이므로 :g/pattern/d 와 같은 명령을 사용할 수 있다. 반대로 패턴에 일치하지 않는 라인을 모두 삭제하려면 :g!/pattern/d:v/pattern/d 명령을 사용한다.

만약 빈 줄을 모두 지우고 싶다면 다음 패턴을 사용한 명령을 적용한다.

:g/^\s*$/d

:g 명령을 사용하면 일반적으로 잘 쓸 일이 없던 편집 명령을 종종 사용하게 되거나, 좀 더 자세히 살펴볼 기회도 된다고 했다. 노멀모드에서 y 키는 yank, 즉 복사의 기능인데 사실 :y 라는 Ex 명령도 존재한다. 동일하게 현재 라인을 복사하는 명령이며, 레지스터명을 인자로 받을 수 있다.

:y 명령을 사용해서 특정한 단어가 들어가는 모든 라인을 하나의 레지스터에 모을 수 있다. 레지스터 이름을 대문자로 쓰면 해당 레지스터를 덮어쓰지 않고, 내용을 연결해서 쓰기 때문이다.

:g/function/y A

혹은 특정한 라인들을 파일의 한쪽으로 이동하거나 복사해서 모아 둘 수 있다. :copy, :move 가 라인을 이동시킬 때 사용하는 명령인데, 그 약어로 :t, :m 이 있다. 이를 활용하면 특정 단어가 들어간 라인만 파일끝에 모아보거나, 파일의 각 라인을 역순으로 재배치할 수 있다.

" 'function'이 들어간 라인을 파일 끝에 복사한다.
:g/function/t$

" m0 을 사용하면 현재 라인을 맨 위로 이동한다.
" 전체라인에 대해 순차적으로 적용하면 모든 줄을 역으로 뒤집을 수 있다.
:g/^/m0

:global 명령에서는 어떤 EX 명령이든 다 사용할 수 있기에, :normal 명령을 사용하면 노멀모드에서 특정 패턴을 찾아다니면서 똑같은 동작을 반복하는 것도, 매크로보다 더 편하게 한큐에 해결할 수 있다.

:g/^\d/exec "normal! \<C-A>"

다음 두 명령은 같은 동작을 하는데, ‘DEBUG’라는 단어가 있는 모든 라인을 주석처리한다.

" normal 명령으로
:g/^\s*DEBUG/exec "norm! I/* \<Esc>A */\<Esc>

" 같은 동작을 :s 명령으로
:g/^\s*DEBUG/s!.*!/* & */! 
" & 는 전체 매치 패턴을 말한다. (no magic)
" magic 모드에서는 \& 를 사용할 것.

특정 단어로 시작하는 줄 맨 뒤에 원하는 단어를 붙여주기

:g/^function/s#$# abort

참고

그외에 참고할만한 편집 명령 관련 팁이다.

:2,8copy15  " 2~8번째 줄을 15번 라인뒤에 복사한다.
:4,15t$   " 4~15번째 줄을 맨 뒤로 복사한다. (t: == :copy)
:-t$      " 바로 앞줄을 맨 뒤로 복사한다.
:m0       " 현재 줄을 맨 위로 이동한다.
:.,+3m$-1 " 현재줄부터 3줄을 맨 윗줄의 위로 이동한다.

Read more

워드프레스에서 고스트로 이전

워드프레스에서 고스트로 이전

이 글을 쓰면서도 믿기 힘든 사실인데, 블로그라는 걸 처음 시작한지가 20년이 되었습니다. 이글루스에서 처음 시작했다가, SK컴즈가 인수한다고 발표함과 동시에 워드프레스로 플랫폼을 옮겼죠. 워드프레스오 옮긴 이후에는 호스팅 환경을 이리 저리 옮기긴 했지만 거의 18년 가까이 워드프레스를 사용해온 것 같습니다. 그 동안 워드프레스는 블로깅 툴에서 명실상부한 범용CMS로 발전했습니다. 사실 웬만한 홈페이지들은 이제

By sooop
띄어쓰기에 대한 생각

띄어쓰기에 대한 생각

업무 메일을 쓸 때 가장 많이 쓰는 말 중에 하나가 메일 말미에 ‘업무에 참고 부탁 드립니다.‘인데요, 어느 날부터 아웃룩에서 이 ‘부탁 드립니다’가 틀렸다고 맞춤법 지적을 하기 시작했습니다. 맞는 말은 ‘부탁드립니다’라고 붙여 쓰는 거라고. 사실 아래아한글 시절부터 이전의 MS워드까지, 워드프로세서들의 한국어 맞춤법 검사 실력은 거의 있으나 마나 한

By sooop

구글 포토에서 아이클라우드로 탈출한 후기

한 때 구글 포토가 백업 용량을 무제한으로 제공해 주겠다고해서, 구글 포토를 사용해서 사진을 백업해왔습니다. 물론 이 이야기의 결말은 저나 이 글을 읽고 있는 여러분이나 모두 알고 있습니다. 사실 AI에게 학습 시킬 이미지 데이터를 모으기 위한 것일 뿐이라거나 하는 이야기는 그 당시에도 있었습니다만, 에이 그래도 구글인데 용량은 넉넉하게 주겠지…하는 순진한

By sooop

Julia의 함수 사용팁

연산자의 함수적 표기 Julia의 연산자는 기본적으로 함수이며, 함수 호출 표기와 같은 방식으로 호출하는 것이 가능합니다. 또한 그 자체로 함수이기 때문에 filter(), map() 과 같이 함수를 인자로 받는 함수에도 연산자를 그대로 적용하는 것이 가능합니다. 특히 + 연산자는 sum() 함수와 같이 여러 인자를 받아 인자들의 합을 구할 수 있습니다. 2 + 3 # = 5 +(2,

By sooop