12 ответов:
попробуйте выполнить следующее или положить в свой
.vimrcvnoremap <C-r> "hy:%s/<C-r>h//gc<left><left><left>при нажатии ctrl+r в визуальном режиме, вам будет предложено ввести текст для замены. Нажмите введите а затем подтвердите каждое изменение, с которым вы согласны y или снижению с n.
эта команда переопределит ваш регистр
h, Так что вы можете выбрать другой (путем измененияhв команде выше в другой ниже случае письмо), что вы не используете.
Это быстрый и простой поиск отображения визуально выделенного текста (без перезаписи регистра h) и без использования терминала dependant + register:
" search for visually hightlighted text vnoremap <c-f> y<ESC>/<c-r>"<CR>Если вам не нравится ctrl-f изменить его на ваши предпочтения
как только текст будет выделен, вы всегда можете сделать
substitution просто набрав:%s//<your-replacement-string>... потому что пустой поиск на
sкоманда использует последнюю искомую строку.
принятый ответ Отлично работает, если у вас нет специальных символов в вашем визуальном выборе. Я взломал вместе два скрипта (Джереми Кантрелл'ы размещены здесь & Питер Odding ' s), чтобы сделать команду, которая позволит вам визуально выбрать строку, которую вы хотите найти, даже если в ней есть специальные символы регулярных выражений.
" 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 - https://stackoverflow.com/questions/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 если это более полезно для кого-либо.
Это тоже работает (по крайней мере, для выборок в одной строке / выборок, которые не содержат специальных символов)
- выделите текст в визуальном режиме
- вставить текст с
y:s/<C-r>0/
0- это янки регистрации.как упоминали другие люди, есть более быстрые способы сделать это, но если вы только начали изучать Vim (как и я), это один из "общих" пути.
//edit: я только что понял, что подход "register" потерпит неудачу, если есть символы, такие как вкладки или новые строки или
/символы в выборе (я должен был бы вручную обработать эти символы как-то для на работу):
от http://vim.wikia.com/wiki/Search_and_replace_in_a_visual_selection:
при визуальном выделении текста нажмите : для ввода команды. Командная строка автоматически введет диапазон:
:'<,'>вы можете ввести команду, такую как s/red/green/g, чтобы заменить каждый красный на зеленый во всех строках последнего визуального выделения. Команда будет выглядеть следующим образом:
:'<,'>s/red/green/gчтобы повторить команду Ex над ранее выбранным блоком, используйте : история. То есть нажмите : затем , затем отредактируйте предыдущую команду.
Мыкола Социально-Экономической Ситуации, Спасибо за подсказку! Ниже используется регистр"+", который (в зависимости от вашего терминала) уже содержит выделенный текст, сохраняя от использования регистра" h".
vnoremap <C-r> <Esc>:%s/<C-r>+//gc<left><left><left>
У меня есть это в мой vimrc:
function! GetVisual() range let reg_save = getreg('"') let regtype_save = getregtype('"') let cb_save = &clipboard set clipboard& normal! ""gvy let selection = getreg('"') call setreg('"', reg_save, regtype_save) let &clipboard = cb_save return selection endfunction vmap <leader>z :%s/<c-r>=GetVisual()<cr>/это захватит визуальный выбор и запустить команду подстановки с ним.
Edit: я должен отметить, что это не работает с многострочным визуальный выбор. Хотя GetVisual () не имеет проблем с его возвратом, я не уверен, как правильно поместить его в командную строку. Если у кого-нибудь есть какие-либо советы о том, как я могу это сделать, пожалуйста, прокомментируйте.
от Vim 7.4, вы можете использовать
gnдвижение, которое выбирает области текста, соответствующие текущему шаблону поиска.после использования
cgnизменить текст в выбранном матче (илиdgnудалить), в обычном режиме, вы можете использовать.чтобы повторить команду и работать на следующем матче.здесь эпизод Vimcast отображение этой функции.
Я не думаю, что вы можете сделать это из коробки. Но многим людям нравится эта функция, поэтому есть тонны макросов и т. д. (Я добавил ее сам). здесь это тот, который вы можете добавить, например; просто нажмите
*для поиска следующего совпадения по визуально выделенному тексту.
моя любимая короткая версия это
vnoremap s / y:s/"/
затем вы можете выделить выделение и просто нажать s/, чтобы запустить команду подстановки для него.
у меня нет репутации для комментариев, поэтому я добавляю еще один ответ...
vnoremap <C-r> "0y<Esc>:%s/<C-r>0//g<left><left>@dmd и @dotancohen: это сработало для меня без использования
"h(явно использует 0, что в любом случае является последней позицией Янка) и работает с putty ssh -> mint (lmde); не знаю о cent. Также использует комментарии @Niloct и @Nathan Friend для удаления подтверждения.
выбор цитаты со звездами, держите курсор в начале выбора.
:%s,\%#\%V\_.*\%V/,**&**,cзаменить выделенный текст в base64:
:%s!\%#\%V\_.*\%V!\=system("base64 -w 0",@")!cпояснение LHS:
\%# matches cursor \%V matches inside the selection only \_. matches any character. \_.* matches beginning to end of selection.объяснение RHS:
\=expr() Replace match with result of expr() for each substitution.не уверен, что \%V-Лучший способ сделать это.

Comments