1. 명령행 인터페이스(7) - vi 편집

post-thumbnail

리눅스의 대표 텍스트 편집기인 vi를 사용해보자.

우선 기본 vi 편집기는 가장 기본적인편집 기능만 있어, 여러 기능이 추가되어 향상된 vim(VI iMproved)를 사용하는 편이 낫다.

vim 패키지 설치

  • 패키지 정보를 갱신한다.
  • vim 패키지를 설치한다.
  • 터미널에서 vi를 실행시키면 다음과 같은 화면을 확인할 수 있다.
  • 편집기 종료 시 :q 를 입력한 후 엔터 키를 누른다.

vi 모드

vi에는 명령, 입력, ex 세 가지 모드로 텍스트를 편집할 수 있다.

모드설명
명령모드텍스트 편집기에서 사용할 수 있는 일반적인 기능을 활용할 수 있는 모드
커서 이동, 텍스트 삭제, 복사, 붙여넣기 등을 할 수 있다.
입력모드실제 텍스트를 입력할 수 있는 모드
명령모드에서 a, i, o 등을 누르면 입력 모드로 전환하며, esc 키를 누르면 입력을 끝내고 다시 명령모드로 돌아온다.
ex모드확장기능을 사용할 수 있는 모드
파일 저장, 편집기 종료, 텍스트 검색, 치환 등이 가능하다.
: 을 눌러 ex모드로 전환하며, esc 키를 누르면 다시 명령모드로 돌아온다.

vi 외 다른 편집기

  • emacs : 기능이 강력한 텍스트 편집기. 다만 여러 기능을 제공하므로 사용법을 쉽게 익히기 어렵다는 단점이 있다.
  • nano : vim이나 emacs보다 사용하기 쉬우며, 우분투에도 기본 설치 되어있다. 방향키를 이용해 커서를 이동하고 ctrl 또는 Alt와 특정 키를 함께 입력하여 텍스트를 편집한다.
  • gedit : 우분투 데스크톱에서 사용가능한 그래픽 환경의 텍스트 편집기. 앱 버튼을 누르고 메뉴에서 연필모양의 텍스트 편집키를 클릭하여 실행한다.
    터미널에서 gedit [파일명] 형식으로 입력하여 실행도 가능하다.

명령모드에서 사용할 수 있는 키

vi 편집기에서는 글자단위, 단어단위, 줄단위로 커서를 이동할 수 있다.

커서 이동

설명
h한 칸 왼쪽으로 이동
l한 칸 오른쪽으로 이동
j한 줄 아래로 이동
k한 줄 위로 이동
w다음 단어의 첫 글자로 이동(word), 각 특수 문자를 단어로 취급
W다음 단어의 첫 글자로 이동, 공백 단위로 이동
b이전 단어의 첫 글자로 이동, 각 특수 문자를 단어로 취급
B이전 단어의 첫 글자로 이동, 공백 단위로 이동
e다음 단어의 마지막 글자로 이동(end word), 각 특수 문자를 단어로 취급
E다음 단어의 마지막 글자로 이동, 공백 단위로 이동
^커서가 있는 줄의 처음으로 이동
$커서가 있는 줄의 마지막으로 이동
enter다음 줄의 첫 글자로 이동
}다음 문단으로 이동
{이전 문단으로 이동
(다음 문장으로 이동
)이전 문장으로 이동
gg파일 처음 위치로 이동
G파일 마지막 위치로 이동

텍스트 입력

명령모드에서 입력모드로 전환하는 입력 키는 a(append), i(insert), o(open) 이다. 대문자와 소문자 키의 기능이 다르므로 주의한다.

설명
a커서 위치의 다음 칸부터 입력
A커서가 있는 줄의 끝부터 입력
i커서 위치부터 입력, insert도 같은 기능
I커서가 있는 줄의 맨 앞에서부터 입력
o커서 바로 아래에 줄을 만들고 입력
O커서 바로 위에 줄을 만들고 입력

텍스트 삭제

기본적인 삭제 키는 x(backspace), d(delete) 이다.

설명
x커서 위치의 글자 삭제
X커서 바로 앞의 글자 삭제
dh커서 바로 앞의 글자 삭제(delete + h), X와 동일
dl커서 위치의 글자 삭제(delete + l), x와 동일
dj커서가 있는 줄과 그 다음 줄을 삭제(delete + j)
dk커서가 있는 줄과 그 앞줄을 삭제(delete + k)
dw한 단어를 삭제(delete word)
d0커서 위치부터 줄의 처음까지 삭제(delete + 0)
d$커서 위치부터 줄의 끝까지 삭제(delete + $)
Dd$와 동일
dd커서가 있는 줄을 삭제
dgg커서가 있는 위치부터 처음 위치까지 모두 삭제(delete + gg)
dG커서가 있는 위치부터 파일 마지막 위치까지 모두 삭제(delete + G)

텍스트 수정

명령모드에서 사용할 수 있는 수정 키는 r(replace), s(subst), c(change) 이다.

설명
r커서 위치의 한 글자 수정
R커서 위치부터 esc를 누를 때 까지 다른 글자로 수정, 단 같은 줄에만 해당
s커서 위치의 한 글자를 지우고 입력 모드에서 수정
S커서가 있는 줄을 지우고 입력 모드에서 수정
ch커서 바로 앞의 한 글자를 지우고 입력 모드에서 수정(change + h), S와 동일
cl커서 위치의 한 글자를 지우고 입력 모드에서 수정(change + l), s와 동일
cj커서가 있는 줄과 그 다음 줄을 수정(change + j)
ck커서가 있는 줄과 그 앞줄을 수정(change + k)
cw커서 위치부터 한 단어를 수정(change word)
c0커서 위치부터 줄의 처음을 지우고 입력 모드에서 수정(change + 0)
c$커서 위치부터 줄의 끝까지 지우고 입력 모드에서 수정(change + $)
Cc$와 동일
cc커서가 있는 줄을 지우고 입력 모드에서 수정
J커서가 있는 줄과 다음 줄을 연결(join)

텍스트 복사

복사 키는 y(yank), 붙여넣기는 p(paste) 이다.

설명
yw커서 위치부터 단어 끝까지 복사(yank word)
y0커서 위치부터 줄의 처음까지 복사(yank + 0)
y$커서 위치부터 줄의 끝까지 복사(yank + $)
yy커서가 있는 줄을 복사
yj커서가 있는 줄과 그 다음줄을 복사(yank + j)
yk커서가 있는 줄과 그 앞줄을 복사(yank + k)
p커서의 다음 위치에 붙여넣기
P커서가 있는 위치에 붙여넣기

작업 취소, 반복

작업 취소는 u(undo), 다시 실행은 ctrl + r(redo) 이다. 취소된 작업에 한해서만 재실행이 가능하며 .는 명령을 반복한다.

설명
u작업 취소
U그 줄에 행해진 작업 모두 취소
ctrl + r다시 실행
.조금전에 했던 명령 반복

텍스트 검색

명령모드에서 텍스트를 검색할 수 있는 키는 /?이다. 파일 내에 동일한 텍스트가 더 있는지 찾으려면 n(next)를 사용한다.

설명
/[검색어]현재 커서를 기준으로 후방으로 텍스트 검색
?[검색어]현재 커서를 기준으로 전방으로 텍스트 검색
n같은 방향으로 검색할 텍스트를 계속 검색
N반대 방향으로 검색할 텍스트를 계속 검색

영역 선택

명령 모드에서 블록으로 영역을 선택하려면 v(visual)을 누른다.
영역 지정 후 y를 누르면 명령 모드로 돌아오면서 선택한 영역을 복사하며, 명령모드에서 다시 p를 눌러 복사한 내용을 붙여넣기 할 수 있다.

설명
v커서가 위치한 곳부터 블록 지정
V커서가 있는 줄부터 블록 지정

파일 작성하기

vi [파일명] 형식으로 새로 생성하거나 추가할 파일 이름과 함께 vi 편집기를 실행한다.

파일 생성 및 내용 작성


파일을 새로 생성하는 경우 위처럼 파일 명 오른쪽에 새 파일임이 표시된다.
틸트(~) 표시는 줄이 비어있다는 의미이다.

현재 상태는 명령모드이다.

a 또는 i를 누르면 화면 아래 정보가 다음과 같이 변경되며 입력모드로 전환된다.

한글 입력도 가능하나, 입력모드로 전환하는 a 또는 i는 반드시 영문 상태에서 입력해야한다.

파일 저장을 위해서는 다시 명령모드로 전환 후 ex모드로 전환해야한다.

파일 내용을 모두 입력했다면 esc 키를 눌러 명령 모드로 전환한다.

화면 아래 끼워넣기 또는 INSERT 문구가 사라졌다면 :을 눌러 ex모드로 전환하여 명령어를 입력한다.
이때, :wq는 파일을 저장하고 vi를 종료하여 명령행으로 되돌아가는 ex 명령이다.

명령행 프롬프트가 나타나면 ls 또는 cat 명령으로 파일이 제대로 생성되었는지 확인해본다.

파일 내용 복사 붙여넣기

문자열 복사 후 붙여넣기 실습을 해보자.
우선 파일을 다시 vi로 열고, 복사할 단어 앞으로 커서를 옮긴 후 v 키를 누르면 화면 아래 메시지가 비주얼 또는 VISUAL 로 바뀐다.

커서 이동 키를 누르면 텍스트를 블록으로 지정할 수 있다. 오른쪽 화살표를 눌러 문장 마지막까지 이동한 후 y를 누르면 비주얼 표시가 사라지며 다시 명령모드로 돌아온 것을 볼 수 있다.

내용을 붙여넣을 위치에 커서를 위치시키고 p를 누르면 복사한 내용을 불러온다.

dd를 누르면 커서가 있는 줄이 삭제된다.

커서를 가장 아래로 옮긴 후 다시 p를 누르면 삭제했던 줄을 불러온다.

yp가 복사, 붙여넣기라면 dp는 잘라내기와 붙여넣기로 볼 수 있다.


ex 모드에서 사용할 수 있는 키

ex 명령의 장점은 일반 명령보다 빠르고 효율적으로 처리할 수 있다는 것이다.
한 번 실행으로 동시에 여러 부분을 변경할 수 있다.

파일 저장, 편집기 종료 키

설명
:q아무런 변경 하지 않았을 때 종료
:q!변경된 내용을 저장하지 않고 강제 종료
:wq저장하고 종료
:xwq와 같은 기능
:w[파일]:새 이름으로 파일 저장(write)

자주 사용하는 ex 명령

명령설명
:sh셸을 실행한다. exit명령 또는 ctrl + D를 눌러 vim으로 되돌아 올 수 있다
:15행 번호 15로 이동한다
:r [파일명]파일 내용을 읽어 현재 위치 아래에 삽입(read)한다
;10,20w [파일명]10번부터 20번 줄까지 파일에 쓰기(write)한다
:10,20d10번부터 20번 줄까지 삭제(delete)한다
:0,$4-d0번부터 끝에서 네줄까지 제외($-4)하고 모두 삭제한다
:20,25y20번부터 25번 줄까지 복사(yank)한다
:10,15m4010번부터 15번 줄까지 40번 줄 아래로 옮긴다(move)
:10,15co4010번부터 15번 줄까지 40번 줄 아래로 복사(copy)한다
:s/abc/def커서 위치부터 줄 끝까지 처
:10,15s/abc/def10번부터 15번 줄까지 40번 줄 아래로 복사(copy)한다
s/abc/def/g커서 위치부터 줄 끝까지 모든 문자열 abc를 def로 바꾼다
:%s/abc/def/g파일 전체에서(%) 줄 끝까지 모든 문자열 abc를 def로 바꾼다
:g/abc/m0파일에서 문자열 abc를 포함하는 줄을 찾아 맨 위(행 번호0)으로 옮긴다
:v/abc/m0파일에서 문자열 abc를 포함하지 않는 줄을 찾아 맨 위로 옮긴다
:10,15g/abc/m010번부터 15번 줄까지 문자열 abc를 포함하는 줄을 찾아 맨 위로 옮긴다

아래 명령어는 16번줄을 2번 줄로 옮긴다.

[시작 행 번호],[끝 행 번호] 형태로 명령을 적용할 줄을 선택할 수도 있다.
아래 명령어는 1번줄과 2번줄을 복사하여 3번줄 뒤에 붙인다.

문자열 치환도 가능하다.
파일 전체(%)에서 모든(g) 문자열 ball game을 찾아 BASEBALL GAME으로 바꾼다(s)

set 명령

ex 모드에서 set 명령을 사용하면 vi 환경 설정 내용을 변경할 수 있다.

명령설명
:set number줄마다 행 번호 보이도록 설정. 단축 명령어는 se nu
행 번호 해제하려면 set nonumber 또는 set nonu라고 입력한다
:syntax on구문 강조 기능 사용
:set autoindent자동 들여쓰기 기능 사용
:set smartindent똑똑한 들여쓰기 기능 사용
:set cindentC 프로그램 들여쓰기 사용
:set shiftwidth=4들여쓰기 4칸으로 설정
:set expandtabtab을 누르면 공백 삽입
:set tabstop=4기본적인 탭 간격은 8칸인데 4칸으로 변경
:set paste터미널에서 붙여넣을 때 자동 들여쓰기 활성화
:set hlsearch/?로 검색한 텍스트 강조. 해제하려면 :nohl을 입력한다
:set showmatch일치하는 괄호 강조
:set ruler현재 커서 위치 표시

set 명령을 별도의 설정파일 .vimrc로 홈 디렉토리에 저장해두면 나만의 vim 환경을 만들 수 있다.

profile
개발공부 요약노트

0개의 댓글