사용자 도구

사이트 도구


vim:tips

차이

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

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
vim:tips [2017/11/29 10:16]
kwon37xi [매칭되는 것을 제외한 다른 줄 삭제]
vim:tips [2021/05/13 08:39] (현재)
kwon37xi [커서 중앙 유지]
줄 68: 줄 68:
 :g/<word>/d :g/<word>/d
 </code> </code>
 +
 +===== 첫번째 단어 삭제 =====
 +<code>
 +:%s/^\w\+\s\+//g
 +</code>
 +  * ''\w\+''는 글자 여러자
 +  * ''\s\+''는 공백 여러개
  
 ===== 그 외 줄 삭제 ===== ===== 그 외 줄 삭제 =====
줄 126: 줄 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.1511919984.txt.gz · 마지막으로 수정됨: 2017/11/29 10:16 저자 kwon37xi