- Today
- Total
Byeo
5. Vimrc-4 (편집 위치 불러오기) 본문
목차
vim을 사용하다 보면 이전에 편집했던 위치를 기억하는게 편한 경우가 많습니다. 특히, 작성한 코드가 길 때 매우 편해집니다.
코드
이를 위해서는 다음 코드를 ~/.vimrc 에 넣으면 됩니다.
autocmd BufReadPost *
\ if line("'\"") > 0 && line("'\"") <= line("$") |
\ exe "normal g`\"" |
\ endif
해석
autocmd BufReadPost *
autocmd : vim에서 event가 발생했을 때 자동으로 명령을 수행하도록 합니다.
BufReadPost: autocmd가 실행 될 event입니다. 파일을 읽은 뒤, 새 버퍼를 편집할 때 코드가 실행됩니다.
* : 모든 파일에 적용됩니다.
if line("'\"") > 0 && line("'\"") <= line("$") |
line("'""): 작은따옴표, 큰따옴표 ('")가 위치하고 있는 줄 번호를 의미합니다.
line("$"): "$"는 문서 끝을 의미합니다. 즉, 마지막 줄입니다.
즉, 작은따옴표, 큰따옴표 ('")의 위치가 1번부터 현 문서 끝 사이에 있는지를 확인합니다.
작은따옴표, 큰따옴표의 의미는 뭘까요?
이는 vim에서 기본적으로 제공하는 mark로, vim 편집을 종료하기 직전의 위치를 의미합니다.
더 많은 mark들은 [vimhelp]에서 확인하실 수 있습니다.
exe "normal g`\"" |
:exe "normal g`"" 를 vim에서 직접 입력한 것과 동일합니다.
exe는 말그대로 뒷 문장을 실행하는 것을 의미합니다.
normal g`" 에서 normal은 보통 모드, 즉 visual mode도 아니고 edit mode도 아닌 상태입니다.
g는 global mode를 의미하기도, 혹은 goto the line number를 의미하기도 한다네요. 일단 저는 g를 빼도 동작하는데, 자세한 내용은 더 알아봐야 할 듯 합니다.
`\" 는 말 그대로 키보드에서 '" 를 누른 것과 동일합니다. 단순히 vim 편집 창에서 조금 움직여본 뒤 (물결표 위, 그레이브 키)와 " (큰따옴표)를 입력 해보세요.
\ endif
if문을 종료합니다.
효과가 없는 경우 (not working)
예전에 어느 포스트에서 본 기억이 있는데, ~/.viminfo의 소유자가 본인이 아니여서 먹히지 않는 경우가 있다고 합니다.
이 에러의 경우,
chown byeo:byeo ~/.viminfo
와 같이 소유자를 바꿔주면 됩니다.
마지막 편집 위치 기억은 구글링 하면 많이 찾아볼 수 있습니다. 저는 이 코드를 조금 해석해보고자 했는데, 조사를 할수록 엄청나게 많은 기능들을 지원한다는 사실에 놀라게 되네요.
'프로그래밍 (Programming) > Vim' 카테고리의 다른 글
6. Vimrc-5 (Space & Tab) (0) | 2021.07.27 |
---|---|
4. Vimrc-3 (Folding) (0) | 2021.07.12 |
3. Vimrc-2 (UI) (0) | 2021.07.09 |
2. Vimrc-1 (테마) (0) | 2021.07.08 |
1. Vim 기초 (0) | 2021.07.02 |