euckr
, utf8
:e ++enc=인코딩
u
: Undo<Ctrl-R>
: Redo-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\+
는 공백 여러개bufdo
:bufdo %s/pattern/replace/ge | update
bufdo
: 모든 버퍼에 대해 명령 수행%s
: 버퍼 내의 모든 줄에 대해 치환 실행pattern
: 검색 패턴replace
: 대체 문자열g
: global, 모두 치환e
: 패턴이 없어도 에러 안내기|
: 실행할 명령들간 구분자update
: 변경사항이 있으면 저장.:edit! # 혹은 :e!
# find 결과로 나온 파일들을 모두다 Vim으로 연다. vim $(find . -name 파일명) # 혹은 find를 먼저 실행하고, 뒤이어 vim 명령을 실행해도 된다. find . -name 파일명 vim $(!!)
~/.vimrc
에 다음을 추가한다. *.py
는 *
로 대체하면 모든 파일에 대해 적용되며, 원하는 확장자를 지정할 수 있다.
autocmd BufWritePre *.py :%s/\s\+$//e
:set nobomb
vmap <C-c> "+yi vmap <C-x> "+c vmap <C-v> c<ESC>"+p imap <C-v> <C-r><C-o>+
Ctrl-V 는 insert 모드에서만 작동한다.
-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 u
submatch(0)
은 검색결과의 전체를 의미함"'
를 찾아서 “
↔ '
상호 치환한다.:s/["']/\=submatch(0) == '"' ? "'" : '"'/g
:%s/[01]$/\=submatch(0) == '0' ? submatch(0) + 100 : submatch(0) * 10/g
:w !sudo tee %
명령으로 강제 저장이 가능하다.Ctrl+A
숫자/문자를 1씩 증가시킴Ctrl+X
숫자/문자를 1씩 감소시킴Ctrl+V 혹은 Ctrl+Q
) 상태에서 g
, Ctrl+A/X
누르면 세로 블럭의 숫자나 문자가 증가함:set nrformats+=alpha
set scroloff=5
, set so=5 : 커서의 위 아래로 5줄씩 보이라는 의미. 기본값 0.
*
set so=999 : 되도록 중앙에 위치하게 함.
*
<Leader>zz'' 누르면 커서 중앙 위치 togglennoremap <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>