사용자 도구

사이트 도구


vim:tips

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
vim:tips [2016/02/29 11:35]
kwon37xi
vim:tips [2021/05/13 08:39] (현재)
kwon37xi [커서 중앙 유지]
줄 1: 줄 1:
 ====== Vim Tips ====== ====== Vim Tips ======
   * [[http://kwon37xi.egloos.com/1501256|vi/vim notes 번역]]   * [[http://kwon37xi.egloos.com/1501256|vi/vim notes 번역]]
 +  * [[http://www.catswhocode.com/blog/vim-cheat-sheet-for-2016|vim cheat sheet for 2016]]
  
 ===== 현재 파일의 인코딩 변경 ===== ===== 현재 파일의 인코딩 변경 =====
줄 13: 줄 14:
   * ''<Ctrl-R>'' : Redo   * ''<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]]   * [[http://vim.wikia.com/wiki/Remove_unwanted_empty_lines|Remove unwanted empty lines]]
줄 44: 줄 58:
 :v/pattern/d :v/pattern/d
 </code> </code>
 +
 +===== 매칭되는 줄 삭제 =====
 +<code>
 +:g/word/d
 +</code>
 +
 +정확히 word 가 단어로써 존재하는 경우만 삭제하려면
 +<code>
 +:g/<word>/d
 +</code>
 +
 +===== 첫번째 단어 삭제 =====
 +<code>
 +:%s/^\w\+\s\+//g
 +</code>
 +  * ''\w\+''는 글자 여러자
 +  * ''\s\+''는 공백 여러개
  
 ===== 그 외 줄 삭제 ===== ===== 그 외 줄 삭제 =====
줄 102: 줄 133:
  
 Ctrl-V 는 insert 모드에서만 작동한다. 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.1456715110.txt.gz · 마지막으로 수정됨: 2016/02/29 11:35 저자 kwon37xi