vim

당장 사용할 기능들

토픽 vim

 

창 이동은 ctrl-w+h등의 키를 ctrl+h로 매핑해서 사용하면 좋습니다.

=============================

[네임레지스터의 mark 호출]네임레지스터에 저장하는 것은 ma처럼 m+네임레지스터를 사용합니다. 

[네임레지스터 호출] `a 또는 'a처럼 '(하나따옴표) 또는 `(그레이브 악센트)를 누르고 네임레지스터를 누르면 호출되는데, 특히, 대문자 네임레지스터는 하나만 사용되어 북마크로도 사용할 수 있습니다.

============================

[저장버퍼의 호출은 `(grave accent, 숫자1 왼쪽의 키)누르고 번호] 코딩을 하다가 버퍼에 저장된 파일을 확인하려면 :ls를 하면 저장되어 있는 '버퍼 리스트'가 나옵니다. 이중에서 호출하려는 버퍼파일이 있으면 grave accent(`)를 누르고 저장된 버퍼숫자를 누르면 호출합니다.

=============================

[NERDTRee에서 파일삭제]  plugin인 NERDTree 팁입니다.

파일에서 m(메뉴 단축키입니다.)누르면 메뉴가 나오고, 메뉴 중에서 (d)elete인 d를 누르면 ...(y/N)확인을 묻을 때, y누르면 삭제됩니다.

=============================

.vimrc설정에서 맵핑할 때 자주 쓰인다. <Leader>은 보통 '백슬러쉬키'를 의미한다. 

=============================

[취소, 취소 재실행] Undo, Redo

명령모드에서 반복 실행 횟수를 넣어서 실행할 수 있다.

 

* 실행 취소

[숫자]u

U (모든 실행을 취소하고 수정 전의 상태로 돌린다.)

 

* 재실행 (취소를 취소함.)

[숫자]Ctrl-r

============================

[Vim 세션저장] vim에서 작업했던 창환경을 그대로 저장하였다가 나중에 작업할 때 띄움.

:mks 하면 세션 저장하고 Vim시작시 vim -S Session.vim하면 직전에 작업했던 창 열림.

=============================

## Key(키) 매핑 방법

ex모드( Shift + : ) map + 원하는 mapping 문자 매크로만듬.

ctrl + v funtion key 입력

============================= 

ex모드( Shift + : ) map + 원하는 mapping 문자 매크로만듬.

ctrl + v funtion key 입력

map! + 원하는 mapping 문자 편집모드에서도 실행가능 매크로

=============================

[Vim tab 이동] 오른쪽 gt, 왼쪽 gT

저번의 화면분할 (split)에 이어서 요번에는 tab을 이용한 화면관리에 대해서 쓰도록 하겟습니다. 

1. 파일열기  

먼져 파일을 하나 엽니다 

# vi /etc/passwd

그럼 tab을 여는 방법들에 대해서 알아보겟습니다.

1) 다음과 같이 입력해 봅시다 

:tabnew 파일이름

위와 같이 입력하면 다음과 같은 창이 됩니다 

 왼쪽상단에 탭이 생겻죠 ^^ 이런식으로 tabnew해서 열때마다 한개씩생긴답니다 

 2) 그럼 두번째 방법은 처음 콘솔에서 열때부터 탭을 선택해서 여는 방법입니다. 콘솔에서 다음과 같이 입력해 봅시다 

# vim -p /etc/passwd ~/.bashrc

 그럼 위에서 본것과 같은 모양이 됩니다 ^^ 물론 2개이상 열수도 있어요 tabpagemax변수가 설정된 만큼요 만약 이걸 바꾸고 싶다면 다음과 같이 하시면 됩니다 

:set tabpagemax=15

 

 2. 창간의 이동 

자 이번엔 파일을 좀 여러개 열어 봅시다 

# vi -p /etc/passwd /home/namsa/.bashrc /home/namsa/.vimrc

 그럼 다음과 같이 될것이다. 

 먼져 탭의 리스트를 보는 명령에 대해 알아보자 

:tabs

 그럼 다음과 같은 결과가 나올꺼다 

 

자그럼 탭이동 명령어에 대해서 알아보자 

행동                           명령(:)                                단축키

오른쪽으로              tabn , tabnext                    gt 

왼쪽으로           tabp , :tabprevious                  gT

처음으로           tabfirst   

끝으로               tabl , tablast 

 

3. 열린문서 모두에 작업하기 

그냥 명령어에 todo만 붙히면 된다. 예를 들어 모든 탭의 foo를 bar로 바꾸고 싶은 경우에는 다음과 같이 하면된다 

:tabdo %s/foo/bar/g

=============================

[vim] 효율적인 화면 관리 split

vim은 콘솔기반의 에디터이기에 창을 여러개 뛰워놓고 작업한다거나 하면 불편함이 많이 느껴집니다. 그래서 오늘은 하나의 창에서 여러개로 나누어서 각각 다른 파일을 편집하거나 tab의 형식으로 여러파일을 나누어서 오픈하는 방법에 대해서 들여다 보겟습니다. 

 

1. 기본적인 창나누기 

먼져 한화면을 여러개로 나누어서 활용하는 법뿌터 보도록 하죠. vim으로 파일하나를 열어 봅시다 

 

# vim ~/.vimrc

 

그리고 이창을 가로로 2조각 내보죠 sp(split)라는 명령어를 사용합니다 vim 안에서 다음과 같이 사용하시면 됩니다. 

:sp ~/.bashrc

 

위와 같이 입력하셧다면 다음의 사진과 같이 가로로 쭈욱 나누어졌을껍니다 

 

그럼 이렇게 열렸는데 어떻게 이동을 해야 할까? 

해답은 단축키인 Ctrl w w 이다 순서대로 눌러주면 다음 창으로 이동한다. 이와 반대방향은 Ctrl w W이다 자세한 이동에 관해서는 뒤에서 언급하겟다 

 

이번에는 세로로 분할해보자 이번에는 vs(vsplit)를 사용할 것이다. 창을 :wq 또는 단축키 ZZ를 이용해 닫고 새로 열어보자 

# vi ~/.vimrc

 

열린창에서 요번엔 vs를 이용해서 나누어 보자 

:vs ~/.bashrc 

 

그럼 다음과 같이 세로로 나뉘어 진다. 

 

이동은 위에서 했던것과 마찬가지로 ctrl w w 이다 

이제 좀더 복잡하게 열어보자 저상태에서 한번더 sp로 파일을 얼어서 또다시 창을 분할해 보자 

:sp /etc/passwd

 

그럼 커서가 있던 곳에서 다음과 같이 분할이 되게 된다. 

 

이런식으로 관호든 세로든 맘것 분할해서 쓸수 있다. 

 

2. 이동에 대해서 

 

이쯤되면 Ctrl w w & Ctrl w W만으로는 불편함이 느껴질수 있다 이동에 관해서 좀더 알아보자. 좀더 방향감각에 대해서 알기위해서 창을 한번더 나누겟다. 일단 오른쪽의 창으로 이동해서 가로로 스프리트해서 4개의 창으로 만들자 

:sp passwd 

 

기본적인 창이동외에 좀더 편리하게 Ctrl w 방향키(hjkl , 위아래오른쪽왼쪽) 을 사용해서 창을 이동할수 있다 오픈쪽 창으로 이동하고자 한다면 Ctrl w l 를 사용하거나 Ctrl w 오른쪽방향키 를 사용하면 된다. 개인적으로는 vim을 사용하는 유져라면 hjkl를 사용하기를 권한다. 

 

추가로 또 3가지가 더있다 

Ctrl w t : 왼쪽 최상단 

Ctrl w b : 오른쪽 최하단 

Ctrl w p : 마지막으로 사용한 창으로 

 

다음은 한눈에 볼수 있도록 간단하게 정리한 버전이다. 

 

3. 창의 크기조절 

명령들을 쭈죽 나열해 보겟습니다 split한 창에 관련된건 모두 Ctrl w 로 시작한다는건 눈치 체셧죠? 창크기 조절은 다음과 같습니다. 

설명 단축키 명령

모든창 같은 크기로

Ctrl w =

 

현재 창 세로 늘리기

Ctrl w + , Ctrl w 숫자 + :res +숫자

현재 창세로 줄이기 Ctrl w - , Ctrl w 숫자 - :res -숫자

현재 창가로 늘리기 Ctrl w > , Ctrl w 숫자 > :vertical res + 숫자

현재 창가로 줄이기 Ctrl w < , Ctrl w 숫자 <

:vertical res - 숫자

 

=================================

 

[북마크 & 파일북마크] 북마크는 편집파일의 ex모드에서 ma함으로써 북마크하고, 'a(콤마(jump to line) a) 또는 `a(억쇠(jump to position(line and column) a)를 하여 북마크한 커서컬럼으로 정확히 이동하거나, 커서줄로 이동한다. 

 

[파일 북마크]

여기서 mA(m대문자A)하여' 파일 북마크'로 사용할 수 있는데, 북마크는 여러 파일에서 사용할 수 있는 반면, 파일북마크는 하나의 파일에서만 사용할 수 있다. 호출은 북마크와 마찬가지로 vim을 실행시킨 다음에 'A(콤마 대문자A)하면 북마크한 파일이 호출되어 그 창에서 열린다. 

 

[삭제 및 변경] 별도의 삭제는 없고, 지정한 문자에 다른 북마크를 지정하거나, 다른 북마크 파일을 지정하면 이전의 북마크가 변경되는 것이다. (삭제가 반드시 꼭 필요하다면 이를 이용하여 삭제북마크 문자(delete 또는 trash)를 지정하여 이용하면 되겠다.)

 

CommandDescription

ma현재 커서의 마크

'ajump to line of mark a (first non-blank character in line)

`ajump to position (line and column) of mark a

d'a현재 라인에서 마크 a라인까지 삭제

d`a현재 커서에서부터 마크 a위치까지 삭제

c'a현재 라인에서 마크 a라인까지 문장 변경

y`ayank text to unnamed buffer from cursor to position of mark a

:marks현재 모든 마크 리스트

:marks aB목록 마크 a,B

d'a 명령의 동작은 "줄 단위로" 시작줄과 끝줄을 포함한다.

d`a 명령의 동작은 "글자 단위로" 마크문자를 포함해서 삭제하지만 커서가 있는 끝문자를 포함하지 않는다.

 

소문자 마크들 사이에 이동은 아래와 같다:

CommandDescription

]''닫힌각괄호콤마'를 사용해서 다음줄 소문자 마크라인으로 이동

[''시작각괄호콤마'를 사용해서 이전 소문자 마크라인으로 이동

]`'닫힌각괄호콤마'를 사용해서 다음 소문자 마크커서로 이동

[`'시작각괄호콤마'를 사용해서 이전 소문자 마크커서로 이동

위 명령은 숫자와 함께 사용하면, 5]` 5번째 마크커서로 이동한다.

 

Special marksEdit

Vim 자동설정되어있는 몇가지 유용한 설정이 있다. 

CommandDescription

`.현재 버퍼에 마지막 변경된 위치로 이동

`"마지막으로 빠져나갔던 현재 버퍼로 이동

`0마직막 마지막 파일편집 위치로 이동

`1`0처럼 이전파일 버퍼로 이동(마찬가지로 `2 등 기타)

''뒤로 이동(현재 커서라인으로 이동되었던 곳으로)

``뒤로 이동 (현재 버퍼 커서로 이동되었던 곳으로)

`[ or `]이전에 변경 또는 복사되었던 문장이 시작/끝으로 이동

`< or `>jump to beginning/end of last visual selection

See the full list at :help '[ and following.

Deleting marksEdit

If you delete a line containing a mark, the mark is also deleted.

If you wipeout a buffer (command :bw), all marks for the buffer are deleted.

 

The :delmarks command (abbreviated as :delm) may be used to delete specified marks.

 

CommandDescription

:delmarks adelete mark a

:delmarks a-ddelete marks a, b, c, d

:delmarks abxydelete marks a, b, x, y

:delmarks aAdelete marks a, A

:delmarks!delete all lowercase marks for the current buffer (a-z)

 

====================================

 

[Vim 매크로] Vim 매크로의 사용은 명령모드에서 "q{name-register}"를 누르면서 시작된다. 명령모드에서 q를 누르면 좌측하단에 '기록중'이라고 표시되면서 입력하는 키를 기록하고 기록의 종료는 다시 "q"로 한다. (* Ex모드(실행모드)는 기록하지 못하는 것으로 봐서 매크로는 Code편집을 위해 사용하는 기능이다.)

 

네임레지스트리는 a~z(26개)를 사용할 수 있다.

예를 들어, 한 줄 주석을 다는 아래 키를 a~z중 a에 등록한다고 하면

^i//[Space Bar] [Esc] [Enter]하고 다시 q를 누르면 a레임레지스트리에 저장된다.

 

호출은 @a처럼 @하고 저장한 레임레지스트리 a를 호출하면 실행된다.

====================================

 

[Vim-복사한 것 붙이기] 명령모드에서 :1,$y 해서 전체를 복사해서 옆창에다 붙여 넣으려고 하는데, 옆창에 있는 한 줄이 있길래 dd로 삭제했죠, 그리고 p하면 방금 삭제한 내용이 나오더래요. 참 나 원... ㅠㅠ 

 

이렇게 전체를 복사한 내용은 어떻게 찾아 붙이나요?

 

[네임레지스터를 사용합니다.]간단한 내용을 복사하고 붙이는 것은 비쥬얼모드인 v또는 V를 사용하는 등 다양한 방식으로 선택하여 y하여 복사하고 p로 붙입니다. 하지만, 복사한 내용을 저장하여 다른 창이나 파일에서 삭제후에 "붙여넣기"를 하려면 레임레지스트리를 사용해야 합니다. 

 

1.["ay -- "ap]복사할 내용 저장하기는 명령모드에서 비주얼모드 등으로 선택하여 "ay로 a레지스터에 저장하고, 붙일 때에도 "(따옴표)를 사용해서 "ap하면 됩니다. Ex모드에서는 :%y(한칸띄고)a하면 문서전체의 내용을 a라는 레지스트리에 저장합니다. 2. 붙여 넣을 파일또는 창으로 가서 :%d하여 모두 삭제하고 :pu a 하거나 "ap하여 a네임레지스터에 있는 내용을 붙여 넣습니다. 

 

*네임레지스터는 a-z까지 사용할 수 있으며 ma로 사용하는 mark하고는 다릅니다. 

 

근데, 복사한 a에 내용을 추가시키는 명령은 뭐죠? A-Z을 하면 기존 네임레지스터에 추가를 합니다. G는 파일의 끝. gg는 문장의 처음.

 

유제환 dd를 안 하고 먼저 붙이고 나중에 dd를 하시면 되죠.

정찬호 전체 복사하시는거면 파이프라인 이용하셔도... a.txt > b.txt

 

[Kldp]일반 모드에서는 "ayy "ap "add 하여 씁니다.

*복사하기 

: 1, 5 yank a

*레지스터에 복사된 내용확인하기

: echo @a

*붙이기

: put a

또 a-z까지의 레지스터는 yank나 delete에 의해 덮어쓰게 되지만

A-Z까지의 레지스터는 기존의 레지스터의 내용뒤에 추가됩니다.

 

Fe.head 블록으로 잡고

"a

"b 등 버퍼에 저장하기.

 

:reg

레지스터 확인(list)

===========================

 

[Vim-폴더(접기) 기능] 접기 :zf 펴기 :zo 다시접기:zc

:zf 를 이용하면 해당영역이 접힌다. :zo 를 사용하면 접힌영영을 원상태로 복구할수 있고 :zc 를 사용하면 해당영역을 다시 접을수 있다. 또한 다중 접기를 허용해서 접근구역을 다시 접을수도 있다.

 

[함수/변수명 자동완성] ctrl+p 함수자동완성 기능

 

2.2.4. 입력 명령

 

지금 vi 를 실행시켜보자. vi 는 기본적으로 명령모드로 실행되므로, 지금상태에서는 문서 작성을 할수 없을것이다. 우리는 다음과 같은 키입력을 통해서 입력모드 상태로 전환할수 있다.

 

표 4. 입력 명령

 

i 현재위치에서 삽입

I 현재줄의 처음위치에서 삽입

a 현재위치에서 한칸앞으로 이동해서 삽입

A 현재줄의 마지막위치에서 삽입

o 새로운 줄을 커서 아래에 연다

O 새로운 줄을 커서 위연다

s 현재 위치의 문자를 지우고 입력모드로 들어간다.

S 현재위치의 라인을 지우고 입력모드로 들어간다.

 

===================================

[vim 단축키] ggvGy는 '처음부터 끝까지 여역을 복사', ggvG= 는 전체 줄맞추기. 참 좋습니다. 

 

[옆 창에 파일 열기] :sp ../폴더/파일이름 하면 다른 소스파일을 두 창에 열어두고 볼 수 있어 좋습니다.

[괄호 하나에 대응하는 괄호 짝 찾기] 짝 찾고 싶은 괄호에 커서 대고 %

[찾고 싶은 글자 찾기] 찾으려는 문자열에 커서를 두고 *나 #을 누른다. 검색결과를 왔다갔다 할 때에는 n 과 N으로 합니다. 

 

[출처: http://rucaus.egloos.com/2352083]

 

6개의 특수 register는 다음과 같습니다.

"" : 바로 이전에 클립 하였던 내용이 항상 들어 가게 됩니다.

". : 최근 까지 타이핑한 내용이 들어 가게 됩니다. 

"% : 현재 작업하고 있는 파일 이름이 들어 가게 됩니다.

"/ : 가장 최근에 검색한 문자열이 들어 가게 됩니다.

": : 최근 입력한 명령 모드의 내용이 들어 있습니다.

"- : 최근 x혹은d 커멘드를 이용하여 지운 내용이 들어 가게 됩니다.

 

  =============================

 

명령모드( ESC ) j 아래로 이동

k 위로 이동

h 좌로 이동

l 우로 이동

w 한단어씩 정방향으로 이동

b 한단어씩 역방향으로 이동

J 라인 붙히기

0(아라비아 숫자) 라인 맨앞으로 이동

$ 라인 맨끝으로 이동

1G 파일의 첫라인으로 이동

$G 파일의 끝라인으로 이동

pageup키 한화면 위로 이동

pagedown키 한화면 아래로 이동

Ctrl + b 한화면 위로 이동

Ctrl + f 한화면 아래로 이동

H 현재화면 첫라인으로 이동

M 현재화면 중간라인으로 이동

L 현재화면 마지막라인으로 이동

입력모드( o ) 현재라인 아래 입력모드 

입력모드( O ) 현재라인 위 입력모드 

입력모드( a ) 커서뒤 입력모드 

입력모드( I ) 현재라인 맨앞 입력모드 

입력모드( A ) 현재라인 맨뒤 입력모드 

ex모드( Shift + : ) w 새로운 이름으로 파일저장하기

n(원하는 아라비아 숫자) 이동하고자 하는 라인위치로 이동

%s/a/b/g 파일 전체에서 a 를 b 로 바꿈

! 외부 명령사용(종료는 q)

h 도움말(종료는 q)

visual( v )

visual line( Shift + v )

visual block( Ctrl + v )

 

y 복사

p 붙혀넣기

d 삭제

U 대문자로

u 소문자로

J 한줄의 라인으로 붙히기

 

##추가 명령어##

 

이동 e 단어의 마지막 글자로

E 단어의 마지막 글자로(띄워쓰기 전까지)

^ 커서위치 라인의 첫 글자로(라인 처음위치))

$ 커서위치 라인의 마지막 글자로(라인 끝위치)

enter 커서위치 다음 라인 첫 글자로

+ 커서위치 위 라인 첫 글자로

- 커서위치 아래 라인 첫 글자로

( 이전 문장 첫 글자로

) 다음 문장 첫 글자로

{ 이전 문단으로

} 다음 문단으로

수정 r 커서 위치의 한글자 교체

R 커서 위치부터 <ESC>를 누를때까지 다른 글자로 교체

s,cl 커서 위치의 글자를 한개를 여러 글자로 교체

ch 커서 바로 앞의 글자를 한개를 여러글자로 교체

cw 커서위치의 한단어를 교체

c0 커서 위치부터 줄의 처음까지 교체

C,c$ 커서 위치부터 줄의 끝까지 교체

cc 커서가 있는 줄을 교체

cj 커서가 있는 줄과 그 다음 줄을 교체

ck 커서가 있는 줄과 그 앞줄을 교체

삭제 x,dl 커서 위치의 글자 삭제

X,dh 커서 바로 앞의 글자 삭제

dw 한 단어를 삭제

d0 커서 위치부터 줄의 처음까지 삭제

D,d$ 커서 위치부터 줄의 끝까지 삭제

dd 커서가 있는 줄을 삭제

dj 커서가 있는 줄과 그 다음 줄을 삭제

dk 커서가 있는줄과 그 앞줄을 삭제

복사 & 붙히기 yw 커서 위치부터 단어끝까지 복사

y0 커서 위치부터 줄의 처음까지 복사

y$ 커서 위치부터 줄의 끝까지 복사

yy 커서가 있는 줄을 복사

yj 커서가 있는 줄과 그 다음줄을 복사

yk 커서가 있는 줄과 그 앞줄을 복사

p 커서의 다음 위치에 붙혀넣기

P 커서가 있는 위치에 붙혀넣기

기타 . 조금전에 했던 명령을 반복(하나만)

~ 대문자는 소문자로,,소문자는 대문자로....

Ctrl + l 현재 화면을 지우고 다시그림...

댓글

댓글 본문
  1. Wilbur0306
    2022.01.14 완료
  2. 드림
    많은 도움이 되었습니다.

    공유해주셔서 감사합니다.
  3. Moonde
    좋은 정리 감사합니다