사용자 도구

사이트 도구


vim:tips

Vim Tips

현재 파일의 인코딩 변경

  • 파일의 인코딩을 잘못 지정해서 읽어들였을 때
  • Vim에서는 - 기호 없이 인코딩을 지정한다. 예) euckr, utf8
:e ++enc=인코딩

Undo/Redo

  • u : Undo
  • <Ctrl-R> : Redo

Script / command 실행

  • -c “command” 첫번째 파일을 읽고서 ex command에 기술된 명령실행
    vim -c 'ex command' filename # 
  • -s scriptfilename : 파일을 읽고서 scriptfilename에 기술된 키를 그대로 눌러줌
    vim -s scriptfile filename
    • scriptfile 내에 기술된 키를 그대로 사람이 누른것과 같이 작동함
      Osome text to add^Msome more text to add^[:%s/text/TEXT^M:wq^M
      • ^M : <CR> 의미. <Ctrl-V 혹은 Q><CR>를 누르면 써지는 문자
      • ^[ : <ESC> 의미. <Ctrl-V 혹은 Q><ESC>를 누르면 써지는 문자

빈 줄 삭제하기

아무것도 없는 줄

:g/^$/d
혹은
:v/./d

공백이 있는 줄

:g/^\s*$/d
혹은
:v/\S/d

뒤따르는 공백을 삭제하고, 세 줄 이상의 빈 줄을 하나로 합친다

# 뒤따르는 공백 삭제
:%s/\s\+$//e

# 세 줄 이상의 빈 줄을 한 줄로 합친다.
:%s/\n\{3,}/\r\r/e

매칭되는 것을 제외한 다른 줄 삭제

# 패턴에 매칭되지 않는 다른 줄들 모두 삭제
:v/pattern/d

매칭되는 줄 삭제

:g/word/d

정확히 word 가 단어로써 존재하는 경우만 삭제하려면

:g/<word>/d

첫번째 단어 삭제

:%s/^\w\+\s\+//g
  • \w\+는 글자 여러자
  • \s\+는 공백 여러개

그 외 줄 삭제

여러 파일(버퍼)에 걸친 텍스트 치환(replace,substitute)

  • bufdo
    :bufdo %s/pattern/replace/ge | update
    • bufdo : 모든 버퍼에 대해 명령 수행
    • %s : 버퍼 내의 모든 줄에 대해 치환 실행
    • pattern : 검색 패턴
    • replace : 대체 문자열
    • g : global, 모두 치환
    • e : 패턴이 없어도 에러 안내기
    • | : 실행할 명령들간 구분자
    • update : 변경사항이 있으면 저장.

파일을 연 뒤에 모든 변경 취소하기

:edit!
# 혹은
:e!

find 명령으로 찾을 파일 일괄 열기

# find 결과로 나온 파일들을 모두다 Vim으로 연다.
vim $(find . -name 파일명)
 
# 혹은 find를 먼저 실행하고, 뒤이어 vim 명령을 실행해도 된다.
find . -name 파일명
vim $(!!)

bash - open vi with passed file name - Stack Overflow 참조.

저장시 끝에 있는 공백 자동 삭제

~/.vimrc에 다음을 추가한다. *.py*로 대체하면 모든 파일에 대해 적용되며, 원하는 확장자를 지정할 수 있다.

autocmd BufWritePre *.py :%s/\s\+$//e

UTF-8 BOM 제거

:set nobomb

Copy & Paste Ctrl-C, Ctrl-X, Ctrl-V

vmap <C-c> "+yi
vmap <C-x> "+c
vmap <C-v> c<ESC>"+p
imap <C-v> <C-r><C-o>+

Ctrl-V 는 insert 모드에서만 작동한다.

명령행 문자열 replace

  • command line / shell script 로 vim 명령을 실행하려면 -c 옵션 사용
  • --not-a-term 옵션을 주면 terminal 이 아닌 경우에도 문제 없이 실행되는 듯. Packer 등에서 사용시 옵션 필요.
vi -c "%s/hello/world/g" -c "wq" test.txt
 
#혹은
vi -c "%s/8080/9090/g | wq" test.txt

정렬후 중복 제거 sort / remove duplicates

:sort u

조건적 치환

root 권한 파일 저장

  • 일반 사용자로 root 권한 디렉토리의 파일을 편집하고 저장할 때 에러가 나면
  • :w !sudo tee % 명령으로 강제 저장이 가능하다.

숫자/알파벳 증가시키기

:set nrformats+=alpha

커서 중앙 유지

nnoremap <Leader>zz :let &scrolloff=999-&scrolloff<CR>
  • 최종
set scrolloff=0 " 원하는 값으로 수정
if !exists('*VCenterCursor')
  augroup VCenterCursor
  au!
  au OptionSet *,*.*
    \ if and( expand("<amatch>")=='scrolloff' ,
    \         exists('#VCenterCursor#WinEnter,WinNew,VimResized') )|
    \   au! VCenterCursor WinEnter,WinNew,VimResized|
    \ endif
  augroup END
  function VCenterCursor()
    if !exists('#VCenterCursor#WinEnter,WinNew,VimResized')
      let s:default_scrolloff=&scrolloff
      let &scrolloff=winheight(win_getid())/2
      au VCenterCursor WinEnter,WinNew,VimResized *,*.*
        \ let &scrolloff=winheight(win_getid())/2
    else
      au! VCenterCursor WinEnter,WinNew,VimResized
      let &scrolloff=s:default_scrolloff
    endif
  endfunction
endif

nnoremap <leader>zz :call VCenterCursor()<CR>

참조

vim/tips.txt · 마지막으로 수정됨: 2021/05/13 08:39 저자 kwon37xi