2014-01-13 1 views
5

У меня в .vrimrc милые маленькие макросы, которые добавляют/удалить C++ стиль комментариев из кода:Поиск «вне записи» в Vim или удалить шаблон поиска из истории поиска?

" remove c++ style comment 
nmap _ :s/^[ \t]*\/\///<CR>==:nohls<cr> 
" comment line, c++ style 
nmap - :s/^[ \t]*/\/\/ /<CR>==:nohls<cr> 

Эти работы, заменив начало линии рисунка с другим. В одном случае добавление //, а в другом - удаление косой черты (если найдено).

Проблема, с которой я сталкиваюсь, заключается в том, что эти макросы используют поиск и замену. В результате нежелательные шаблоны поиска сохраняются в истории поиска vim, загромождая его.

Рассмотрим последовательность:

  1. Искали 'привет'
  2. Используйте макрос комментировать линию
  3. поиск снова (набрав 'п' или /, KeyUp, введите)
  4. Результат: поиск не ищет «привет», потому что шаблон поиска установлен в зависимости от того, что использовал макрос, который является^[\ t] *

Как это может быть m acro изменить, чтобы не вводить нежелательные шаблоны в историю поиска?

+1

См. ': Help histdel()'. – romainl

ответ

7
  1. Сохранить текущий поиск регистр с let old = @/,
  2. сделать вещь,
  3. удалить последний поиск из истории с call histdel('/', -1),
  4. восстановить поиск зарегистрироваться let @/ = old.

Как это:

" remove c++ style comment 
nnoremap <silent> _ :let old = @/<bar>s/^[ \t]*\/\///<CR>==:nohls<bar>call histdel('/', -1)<bar>let @/ = old<cr> 
" comment line, c++ style 
nnoremap <silent> - :let old = @/<bar>s/^[ \t]*/\/\/ /<CR>==:nohls<bar>call histdel('/', -1)<bar>let @/ = old<cr> 

Или использовать Tim Папы Commentary.

+0

Это прекрасно, именно то, что я искал. Благодаря! Кроме того, я считаю «комментарий» очень полезным, я думаю, что буду использовать его отныне и дальше. Единственная проблема, с которой я столкнулся, заключалась в том, что она очищала выбор нескольких строк при переключении комментариев. Это легко решить, добавив команду «gv», которая работает только в визуальном режиме. Например: nmap - gcc vmap - gcgv – tivoni

8

Последние Vims имеют модификатор :keeppattern, который предотвратит добавление рисунка из истории.

+0

Модификатор ': keeppattern' также сохраняет флаги шаблона поиска? Что относительно флага замещения? Я думаю, это было бы здорово. –

+0

Это ничего не спасает, но предотвращает, что история будет опробована –

+0

Будет ли это использовать, чтобы флаги поиска не загрязнялись? например Найдите что-то вроде '/ foo/e', если я запустил вроде': keeppattern/baz' мой следующий 'n' be'/foo/e' или просто '/ foo'? –

2

Также есть функция search(), которая не затрагивает историю поиска.

Смежные вопросы