[vim] Vim 검색 및 선택한 텍스트 바꾸기
텍스트가 있고 시각 모드로 들어가 텍스트를 선택한다고 가정 해 보겠습니다. 강조 표시된 텍스트를 빠르게 검색하고 다른 텍스트로 바꾸려면 어떻게합니까?
답변
다음을 실행하거나 귀하의 .vimrc
vnoremap <C-r> "hy:%s/<C-r>h//gc<left><left><left>
시각 모드에서 ctrl+ 를 누르면 r바꿀 텍스트를 입력하라는 메시지가 표시됩니다. 를 누른 enter다음 동의 y하거나 거부하는 각 변경 사항을 확인합니다 n.
이 명령은 레지스터를 재정의 h
하므로 h
사용하지 않는 다른 명령을 선택할 수 있습니다 ( 위의 명령을 다른 소문자 로 변경 ).
답변
터미널 종속 + 레지스터를 사용하지 않고 (h 레지스터를 덮어 쓰지 않고) 시각적으로 강조 표시된 텍스트를 빠르고 간단한 매핑 검색 :
" search for visually hightlighted text
vnoremap <c-f> y<ESC>/<c-r>"<CR>
ctrl-f가 마음에 들지 않으면 원하는대로 변경하십시오.
텍스트가 강조 표시되면 다음 s
을 입력하여 간단히 제거 할 수 있습니다 .
%s//<your-replacement-string>
… s
명령 에 대한 빈 검색 은 마지막으로 검색된 문자열을 사용 하기 때문 입니다.
답변
이것은 또한 작동합니다 (적어도 한 줄의 선택 / 특수 문자가 포함되지 않은 선택)
- 시각 모드에서 텍스트 선택
- 텍스트를 잡아 당기다
y
:s/<C-r>0/
0
yank 레지스터입니다.
다른 사람들이 언급했듯이이 작업을 수행하는 더 빠른 방법이 있지만, 나처럼 Vim을 배우기 시작했다면 이것이 ‘일반적인’방법 중 하나입니다.
// 편집 : 탭이나 줄 바꿈 또는 /
문자 와 같은 문자가 선택 항목에 있으면 ‘등록’방식이 실패한다는 것을 방금 깨달았습니다 ( :s
명령이 작동 하려면 이러한 문자를 수동으로 처리 해야합니다).
답변
시각적 선택에 특수 문자가 없으면 허용되는 대답은 훌륭하게 작동합니다. 두 개의 스크립트 ( Jeremy Cantrell 의 게시글 및 Peter Odding 의)를 함께 해킹하여 특수 정규식 문자가 있어도 찾고자하는 문자열을 시각적으로 선택할 수있는 명령을 만들었습니다.
" Escape special characters in a string for exact matching.
" This is useful to copying strings from the file to the search tool
" Based on this - http://peterodding.com/code/vim/profile/autoload/xolox/escape.vim
function! EscapeString (string)
let string=a:string
" Escape regex characters
let string = escape(string, '^$.*\/~[]')
" Escape the line endings
let string = substitute(string, '\n', '\\n', 'g')
return string
endfunction
" Get the current visual block for search and replaces
" This function passed the visual block through a string escape function
" Based on this - /programming/676600/vim-replace-selected-text/677918#677918
function! GetVisual() range
" Save the current register and clipboard
let reg_save = getreg('"')
let regtype_save = getregtype('"')
let cb_save = &clipboard
set clipboard&
" Put the current visual selection in the " register
normal! ""gvy
let selection = getreg('"')
" Put the saved registers and clipboards back
call setreg('"', reg_save, regtype_save)
let &clipboard = cb_save
"Escape any special characters in the selection
let escaped_selection = EscapeString(selection)
return escaped_selection
endfunction
" Start the find and replace command across the entire file
vmap <leader>z <Esc>:%s/<c-r>=GetVisual()<cr>/
누구에게나 유용하다면 내 vimrc 에 이것을 포함 시켰습니다 .
답변
Vim 7.4부터 gn
현재 검색 패턴과 일치하는 텍스트 영역을 선택 하는 동작을 사용할 수 있습니다 .
를 사용하여 cgn
현재 선택된 일치 항목의 텍스트를 변경 (또는 dgn
삭제) 한 후 일반 모드 .
에서을 사용 하여 명령을 반복하고 다음 일치 항목을 조작 할 수 있습니다 .
있다 Vimcast의 에피소드 에서이 기능을 보여주는이.
답변
Mykola Golubyev, 팁 주셔서 감사합니다! 다음은 이미 강조 표시된 텍스트를 포함하는 “+”레지스터를 사용합니다 (터미널에 따라 다름). “h”레지스터를 사용하여 저장합니다.
vnoremap <C-r> <Esc>:%s/<C-r>+//gc<left><left><left>
답변
에서 http://vim.wikia.com/wiki/Search_and_replace_in_a_visual_selection :
텍스트가 시각적으로 선택되면 :을 눌러 명령을 입력합니다. 명령 줄은 자동으로 범위를 입력합니다.
:'<,'>
s / red / green / g와 같은 명령을 입력하여 마지막 시각적 선택의 모든 줄에서 각 빨간색을 녹색으로 바꿀 수 있습니다. 명령은 다음과 같이 나타납니다.
:'<,'>s/red/green/g
이전에 선택한 블록에 대해 Ex 명령을 반복하려면 : history를 사용하십시오. 즉,을 누른 다음을 누른 다음 이전 명령을 편집합니다.