내용으로 건너뛰기
권남
사용자 도구
로그인
사이트 도구
검색
도구
문서 보기
이전 판
역링크
최근 바뀜
미디어 관리자
사이트맵
로그인
>
최근 바뀜
미디어 관리자
사이트맵
추적:
•
versioncontrol
•
anarchy
•
go
•
visual_studio_code
•
colorprompt
vim:tips
이 문서는 읽기 전용입니다. 원본을 볼 수는 있지만 바꿀 수는 없습니다. 문제가 있다고 생각하면 관리자에게 문의하세요.
====== Vim Tips ====== * [[http://kwon37xi.egloos.com/1501256|vi/vim notes 번역]] * [[http://www.catswhocode.com/blog/vim-cheat-sheet-for-2016|vim cheat sheet for 2016]] ===== 현재 파일의 인코딩 변경 ===== * 파일의 인코딩을 잘못 지정해서 읽어들였을 때 * Vim에서는 - 기호 없이 인코딩을 지정한다. 예) ''euckr'', ''utf8'' <code> :e ++enc=인코딩 </code> ===== Undo/Redo ===== * ''u'' : Undo * ''<Ctrl-R>'' : Redo ===== Script / command 실행 ===== * ''-c "command"'' 첫번째 파일을 읽고서 ex command에 기술된 명령실행<code sh> vim -c 'ex command' filename # </code> * ''-s scriptfilename'' : 파일을 읽고서 scriptfilename에 기술된 키를 그대로 눌러줌<code> vim -s scriptfile filename </code> * [[http://stackoverflow.com/questions/22575125/vim-how-to-insert-text-save-and-exit-from-bash|shell - vim how to insert text, save and exit from bash]] * ''scriptfile'' 내에 기술된 키를 그대로 사람이 누른것과 같이 작동함<code> Osome text to add^Msome more text to add^[:%s/text/TEXT^M:wq^M </code> * ''^M'' : ''<CR>'' 의미. ''<Ctrl-V 혹은 Q><CR>''를 누르면 써지는 문자 * ''^['' : ''<ESC>'' 의미. ''<Ctrl-V 혹은 Q><ESC>''를 누르면 써지는 문자 ===== 빈 줄 삭제하기 ===== * [[http://vim.wikia.com/wiki/Remove_unwanted_empty_lines|Remove unwanted empty lines]] ==== 아무것도 없는 줄 ==== <code> :g/^$/d 혹은 :v/./d </code> ==== 공백이 있는 줄 ==== <code> :g/^\s*$/d 혹은 :v/\S/d </code> ==== 뒤따르는 공백을 삭제하고, 세 줄 이상의 빈 줄을 하나로 합친다 ==== <code> # 뒤따르는 공백 삭제 :%s/\s\+$//e # 세 줄 이상의 빈 줄을 한 줄로 합친다. :%s/\n\{3,}/\r\r/e </code> ===== 매칭되는 것을 제외한 다른 줄 삭제 ===== <code> # 패턴에 매칭되지 않는 다른 줄들 모두 삭제 :v/pattern/d </code> ===== 매칭되는 줄 삭제 ===== <code> :g/word/d </code> 정확히 word 가 단어로써 존재하는 경우만 삭제하려면 <code> :g/<word>/d </code> ===== 첫번째 단어 삭제 ===== <code> :%s/^\w\+\s\+//g </code> * ''\w\+''는 글자 여러자 * ''\s\+''는 공백 여러개 ===== 그 외 줄 삭제 ===== * http://vim.wikia.com/wiki/Delete_all_lines_containing_a_pattern ===== 여러 파일(버퍼)에 걸친 텍스트 치환(replace,substitute) ===== * [[http://vim.wikia.com/wiki/Search_and_replace_in_multiple_buffers|Search and replace in multiple buffers]] 참조 * ''bufdo'' <code> :bufdo %s/pattern/replace/ge | update </code> * ''bufdo'' : 모든 버퍼에 대해 명령 수행 * ''%s'' : 버퍼 내의 모든 줄에 대해 치환 실행 * ''pattern'' : 검색 패턴 * ''replace'' : 대체 문자열 * ''g'' : global, 모두 치환 * ''e'' : 패턴이 없어도 에러 안내기 * ''|'' : 실행할 명령들간 구분자 * ''update'' : 변경사항이 있으면 저장. ===== 파일을 연 뒤에 모든 변경 취소하기 ===== <code> :edit! # 혹은 :e! </code> ===== find 명령으로 찾을 파일 일괄 열기 ===== <code sh> # find 결과로 나온 파일들을 모두다 Vim으로 연다. vim $(find . -name 파일명) # 혹은 find를 먼저 실행하고, 뒤이어 vim 명령을 실행해도 된다. find . -name 파일명 vim $(!!) </code> [[http://stackoverflow.com/questions/10038482/open-vi-with-passed-file-name|bash - open vi with passed file name - Stack Overflow]] 참조. ===== 저장시 끝에 있는 공백 자동 삭제 ===== ''~/.vimrc''에 다음을 추가한다. ''*.py''는 ''*''로 대체하면 모든 파일에 대해 적용되며, 원하는 확장자를 지정할 수 있다. <code vim> autocmd BufWritePre *.py :%s/\s\+$//e </code> ===== UTF-8 BOM 제거 ===== <code> :set nobomb </code> ===== Copy & Paste Ctrl-C, Ctrl-X, Ctrl-V ===== * http://superuser.com/questions/10588/how-to-make-cut-copy-paste-in-gvim-on-ubuntu-work-with-ctrlx-ctrlc-ctrlv <code> vmap <C-c> "+yi vmap <C-x> "+c vmap <C-v> c<ESC>"+p imap <C-v> <C-r><C-o>+ </code> Ctrl-V 는 insert 모드에서만 작동한다. ===== 명령행 문자열 replace ===== * command line / shell script 로 vim 명령을 실행하려면 ''-c'' 옵션 사용 * ''%%--%%not-a-term'' 옵션을 주면 terminal 이 아닌 경우에도 문제 없이 실행되는 듯. [[devops:packer|Packer]] 등에서 사용시 옵션 필요. <code sh> vi -c "%s/hello/world/g" -c "wq" test.txt #혹은 vi -c "%s/8080/9090/g | wq" test.txt </code> ===== 정렬후 중복 제거 sort / remove duplicates ===== <code> :sort u </code> ===== 조건적 치환 ===== * [[https://stackoverflow.com/questions/17337979/conditional-replace-in-vim|vi - Conditional replace in vim - Stack Overflow]] * [[https://www.popit.kr/vim-%EC%B9%98%ED%99%98-%EA%BC%BC%EC%88%98/|VIM 치환 꼼수? | Popit]] * ''submatch(0)''은 검색결과의 전체를 의미함 * 아래 치환문은 ''%%"'%%'' 를 찾아서 ''"'' <-> ''%%'%%'' 상호 치환한다.<code> :s/["']/\=submatch(0) == '"' ? "'" : '"'/g </code> * 산술 연산<code> :%s/[01]$/\=submatch(0) == '0' ? submatch(0) + 100 : submatch(0) * 10/g </code> ===== root 권한 파일 저장 ===== * 일반 사용자로 root 권한 디렉토리의 파일을 편집하고 저장할 때 에러가 나면 * '':w !sudo tee %'' 명령으로 강제 저장이 가능하다. ===== 숫자/알파벳 증가시키기 ===== * [[https://www.youtube.com/channel/UCa0tJguRNbU6I8OO3nUvXxQ|(1) Incrementing a Sequence | Vim 🔥 Tips and Tricks - YouTube]] * ''Ctrl+A'' 숫자/문자를 1씩 증가시킴 * ''Ctrl+X'' 숫자/문자를 1씩 감소시킴 * vertical block(''Ctrl+V 혹은 Ctrl+Q'') 상태에서 ''g'', ''Ctrl+A/X'' 누르면 세로 블럭의 숫자나 문자가 증가함 * 알파벳도 증가시키기 <code sh> :set nrformats+=alpha </code> ===== 커서 중앙 유지 ===== * 화면상에서 커서 위치가 항상 화면 중앙에 오게 하는 방법 * [[https://vim.fandom.com/wiki/Keep_your_cursor_centered_vertically_on_the_screen|Keep your cursor centered vertically on the screen | Vim Tips Wiki | Fandom]] * ''set scroloff=5'', ''set so=5 : 커서의 위 아래로 5줄씩 보이라는 의미. 기본값 0. * ''set so=999'' : 되도록 중앙에 위치하게 함. * ''<Leader>zz'' 누르면 커서 중앙 위치 toggle <code vim> nnoremap <Leader>zz :let &scrolloff=999-&scrolloff<CR> </code> * 최종 <code> 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> </code> ===== 참조 ===== * [[http://zzapper.co.uk/vimtips.html|Best of VIM Tips, gVIM's Key Features zzapper]]
vim/tips.txt
· 마지막으로 수정됨: 2021/05/13 08:39 저자
kwon37xi
문서 도구
문서 보기
이전 판
역링크
맨 위로