사용자 도구

사이트 도구


vim:tips

차이

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

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
vim:tips [2016/06/07 12:40]
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]]
  
 ===== 현재 파일의 인코딩 변경 ===== ===== 현재 파일의 인코딩 변경 =====
줄 57: 줄 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\+''는 공백 여러개
  
 ===== 그 외 줄 삭제 ===== ===== 그 외 줄 삭제 =====
줄 116: 줄 134:
 Ctrl-V 는 insert 모드에서만 작동한다. Ctrl-V 는 insert 모드에서만 작동한다.
  
-===== vimgrep =====+===== 명령행 문자열 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> <code>
-:vimgrep /stext/ **/*.txt | :copen+:sort u
 </code> </code>
-''stext'' 문자을 ``*.txt`` 에서 찾아서 결과를 여준다.+ 
 +===== 조건적 치환 ===== 
 +  * [[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) == '"' ? "'" : '"'/
 +</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())/
 +      au VCenterCursor WinEnter,WinNew,VimResized *,*.* 
 +        \ let &scrolloff=winheight(win_getid())/
 +    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.1465272644.txt.gz · 마지막으로 수정됨: 2016/06/07 12:40 저자 kwon37xi