본문 바로가기

별걸다하는 IT/리눅스 유닉스

[리눅스 Linux] vi 편집기 블락 범위 복사, 주석 블럭 처리, 범위 삭제, 비주얼 블럭 모드, 복붙 norm

[ 리눅스 Linux, 유닉스 Unix 포스팅 링크 모음 ]

안녕하세요~!! 저번 시간 vi 편집기의 아주 기초 사용법에 이어서

오늘 vi편집기에서 자주 사용하게 될 블락 복사 기능에 대해서 간단하고 빠르게~ 다뤄볼게요 

비주얼 모드의 편리함과 필요성?

이전 vi 편집기 이동키, 단축키 글을 보지 못했다면 아래 링크를!

 

[리눅스, 유닉스]vi (vim) 편집기 기본 사용법, 명령어, 단축키, 동작법 & 문제

[리눅스 / 유닉스 / 셸 프로그래밍 완전 정복 목차 바로가기 ] 가장 많이 사용되고, 꼭 알아야 하는 ~ vi 편집기 사용하기 vi는 다른 편집기들과는 다르게 모드형 편집기라는 특징이 있습니다. (명령 모드, 입력..

jhnyang.tistory.com

저번시간에 여러 줄을 한꺼번에 복사하거나 삭제하는 거에 대해서는 배웠었어요 ㅎㅎ

10줄을 복사하고 싶다! 그럼 10 yy 쳐주고, 3줄을 삭제하고 싶다 이러면 3dd 이렇게 단축키를 눌러주면 vi편집기에서 해당 기능이 수행됐었죠!

텍스트 추가

그런데 만약 이렇게 줄단위가 아니라, 위 사진처럼 중간에 정사각형 정도를 복사하고 싶다면..?

또는 3줄 중간부터 10줄 3분의 2지점까지 복사를 하고 싶다면...?

내가 원하는 코드만 복사하기에는 줄 단위 단축키는 한계가 있어요 ㅎㅎ

 

그리고 ! 개발자라면 많이 사용할 블록 주석 처리!

에러를 찾기 위해서 또는 로직 테스트를 하기 위해서 해당 기능은 필수적이죠.ㅎㅎ

그런데... 한 로직이 만약 30줄이다..

그 줄들을 다 주석처리 해보고 싶다...

아 언제 매줄 일일이 주석(#)을 삽입하고 있을까요..

 

이런 작업들을 편리하게 할 수 있게 비주얼 모드가 도와줍니다ㅎㅎ

비주얼 모드 종류

vi편집기에는 명령모드, 편집모드, ex 명령모드 외에도 비주얼 모드라는게 또 있어요 ㅎㅎ

비주얼 모드는 유용하게 범위를 선택하고 조작할 수 있는 모드로 총 세 가지 모드가 있는데,

1. 글자 단위로 범위 선택하는거랑, -- visual (v)

2. 라인 단위, -- visual line (V)

3. 블럭 단위 -- visual block (Ctrl + v)

이렇게 있습니다.

 

(그런데 유닉스 AIX에서는 비주얼모드가 없는 경우가 있더라고요, 역시 운영체제에 따라 다를 수 있으니, 확인하고 갑시당~)

비주얼 모드

비주얼모드는 말그대로 글자 단위로 선택이 가능해요.

블럭처리 (마치 마우스로 드래그 해서 여러 글자를 선택하는 거처럼)를 시작하고자 하는 시작점으로 커서를 옮겨줍시다. 그리고 v를 눌러 비주얼모드로 들어간 후, 블럭처리하길 원하는 구간만큼 커서를 이동시켜서 구간을 잡으면 됩니다.

그리고 복사를 하던, 잘라내기를 하던~ 변경을 하던~ 원하는 작업을 수행!

 

예시로 /etc/crontab 파일을 사용해볼게요.

관리자로 들어가서~

vi /etc/crontab

커서를 원하는 곳으로 이동시켜줍니다. 커서는 h,j,k,l 키를 이용해서 왼쪽, 아래, 위쪽, 오른쪽으로 각각 이동할 수 있는거 알고있죠?!

원하는 위치에서 v를 눌러주면 visual mode로 변경이 돼요 ㅎㅎ (참고로 visual mode를 나가고 싶다면 esc 키를 눌러서 ex명령모드로 돌아와주면 됩니다)

그리고 원하는 구간까지 이동을 해주면 아래처럼 블락처리가 됩니다!

이렇게 선택하면 몇 글자를 블록으로 지정했는지 나옵니다. ㅎㅎ 뒤에 tab가지 포함되어 5글자가 블럭처리 됐나보네요 ㅎㅎ(라인으로 블럭처리 할 경우에는 블럭된 라인 수로 떠요 ) 그리고 몇 줄 몇 열에서 블럭이 지정되었는지도 나타납니다 ㅎㅎ 

블럭처리한 상태에서 위 또는 아래로 이동해주면 이렇게 라인 단위로 블럭도 지정 가능해요.

비주얼 모드 뿐만 아니라 비주얼 라인모드, 비주얼 블럭모드 실행법은 모두 동일해요!

 

아무튼 원하는 부분을 블럭처리 해준 후, y를 눌러서 복사해줍시다.

그리고 원하는 부분으로 이동해서 p를 눌러 붙여넣기 해주면 복붙 끝!

또는 d나 x를 눌러서 블럭단위를 한꺼번에 삭제해버릴 수도 있어요 ㅎㅎ

비주얼 라인 모드

비주얼 라인 모드는 말그대로~~ 라인 단위로 블럭처리를 하고 싶을 때 사용합니다.

그 외에는 차이점이 없으요 ㅎㅎ

vi 들어가서 shift + v로 비주얼 라인 모드에 들어가주게 되면

해당 커서가 있는 라인이 이처럼 블럭처리가 됩니다. ㅎㅎ

위 아래 키보드 또는 j,k 키로 라인을 이렇게 블럭으로 지정할 수 있어요

원하는 라인 주석 처리하기

보통 주석은 라인 단위로 처리 많이 하죠?

블럭 라인 모드에서 주석 처리하는 방법을 알아볼까요?

만약 C언어나 이런 프로그래밍 코드를 편집하는 거면 블럭을 의미하는 '//'를 셸 스크립트라면 '#'를 앞에 넣어줘야 할꺼예요 ㅎㅎ

저 두 줄을 주석 처리해볼게요 ㅎㅎ

저렇게 블럭처리 한 상태에서 콜롬 (:) (shift+;)을 눌러주면 위 사진처럼 

:'<,'>

가 뜰거예요 ㅎㅎ 참고로 <와 > 는 들여쓰기를 해줍니다. 이 상태에서 

:'<,'> norm i// (//으로 주석처리) 
:'<,'> norm i# (#으로 주석처리)

이렇게 해주면 됩니다.

norm이란 normal 모드 명령을 실행하겠다는 명령어예요 ㅎㅎ

i는 insert의 약자! 참고로 치환은 r입니다. ㅎㅎ 만약 #로 되어있는 주석처리를 //으로 치환하고 싶다면

: '<, '> norm r//

이렇게 해주면 된다는거~ 삭제는 그냥 norm x하면 돼요 ㅎㅎ (x가 지우는건데 그냥 x만 하면 맨 앞에 한글자를 지우는거라..)

(근데 사실 복붙이아니라 주석처리를 위해서는 비주얼 모드를 사용할 필요가 없죠..)

:5,10s/^/# (5라인부터 10라인까지 주석처리)

insert 모드에서 이 명령어로 주석처리가 되니까... (저는 주로 이렇게 써요 ㅎㅎ)

비주얼 블럭 모드

이번에는 비주얼 블럭 모드예요 ㅎㅎ

얘는 행렬처럼 블럭처리를 할 수 있다는 아주 강한 강점이 있지요

이런식으로 박스처리 할 수 있고 밑에는 행렬처럼 블럭처리된 행, 열을 표시해줍니다. ㅎㅎ

근데 보통 비주얼 블럭 모드가 모든 기능이 다 되니까 블럭 모드로 들어가요 ㅎㅎ

중간부터 주석처리하기

일단 비주얼 라인은 라인단위로밖에 처리를 못하니까..

내가 만약 저 test로 시작되는 부분부터 뒤까지만 싹 다 주석처리를 하고 싶다 이럴 수 있잖아요? (사실 이것도 인서트 모드에서 되니까 굳이 비주얼 모드로 할 필요는 읍지만..)

시작하는 부분에서 shift+i (즉 대문자 I)를 입력해주세요

그러면 맨 앞 t부분에 커서가 생길텐데 거기다가 주석(#)을 입력해주고,, esc를 눌러 모드를 나가고 확인해보면 

내가 블럭처리했던 부분 시작점에 #이 들어가있는 걸 알 수 있습니다.

하나만 된 것처럼 보이지만.. esc로 나가면

이렇게 변경되어 있음!

 

다중 범위를 편집하거나~ 복붙하거나~ 주석처리 하는 등

다중 블럭들을 자유자재로 다루는데 유용한 비주얼 모드에 대해서 알아봤어요 ㅎㅎ

 

▼비주얼 모드에 대해 잘 설명되어 있는 documentation!

http://vimdoc.sourceforge.net/htmldoc/visual.html

 

비주얼 모드가 없는 유닉스나 다른 운영체제에서는 mark 기능을 사용해서 해당 기능을 사용할 수 있어요 ㅎㅎ

mark기능에 대해서는 다음 포스팅에서 알아볼게요!

공감, 댓글, 광고보답은 더 쉽고 유익한 포스팅을 작성하고자 하는 제게 힘이 됩니다 :)

주말 잘보내시고 다음 포스팅에서 봐요~