Как искать текущее слово на всех открытых вкладках в Vim?

Рассмотрение документации управления VirtualBox VM по http://www.virtualbox.org/manual/ch08.html

Для списка VMs используйте команду VBoxManage list vms

Для запуска VM используйте команду VBoxManage startvm

http://www.virtualbox.org/manual/ch08.html#vboxmanage-controlvm

Для управления VM использовать VBoxManage controlvm

controlvm подкоманда позволяет Вам изменять состояние виртуальной машины, которая в настоящее время работает. Следующее может быть указано:

VBoxManage controlvm pause временно приостанавливает виртуальную машину, не изменяя ее состояние навсегда. Окно VM будет нарисовано в сером, чтобы указать, что VM в настоящее время приостанавливается. (Это эквивалентно выбору объекта "Паузы" в меню "Machine" GUI.)

Использовать VBoxManage controlvm resume отменить предыдущую команду "пауза". (Это эквивалентно выбору объекта "Резюме" в меню "Machine" GUI.)

VBoxManage controlvm reset имеет тот же эффект на виртуальную машину как нажатие кнопки "Reset" на реальном компьютере: "холодная" перезагрузка виртуальной машины, которая перезапустит и загрузит гостевую операционную систему снова сразу. Состояние VM не сохраняется заранее, и данные могут быть потеряны. (Это эквивалентно выбору объекта "Сброса" в меню "Machine" GUI.)

VBoxManage controlvm poweroff имеет тот же эффект на виртуальную машину как надевание силового кабеля на реальном компьютере. Снова, состояние VM не сохраняется заранее, и данные могут быть потеряны. (Это эквивалентно выбору "Близкого" объекта в меню "Machine" GUI или нажатия близкой кнопки окна, и затем выбор "Выключает машину" в диалоговом окне.)

После этого состояние VM будет "Выключено".

16
03.01.2013, 19:41
4 ответа

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

" enables to search in all open buffers with :Search <pattern>
command! -nargs=1 Search call setqflist([]) | silent bufdo grepadd! <args> %

nnoremap <left>  :cprev<cr>zvzz
nnoremap <right> :cnext<cr>zvzz

Первая строка создает команду Search с шаблоном поиска как аргумент, который пишет результаты в списке quickfix. Две других строки отображаются (по крайней мере, для меня) бесполезные клавиши со стрелками к чему-то полезному; они отображаются для перехода к следующему/предыдущему Поиску или к следующей/предыдущей ошибке компиляции, и т.д., они просто ступают throu список quickfix. Можно использовать это следующим образом:

:Search foobar
<right>
<right>
…
4
27.01.2020, 19:48
  • 1
    я люблю эту команду, но добавил несколько вещей, таким образом, это выйдет из критериев поиска лучше и вызовет перерисовку. (использование тихого с разделениями может вызвать энергию ui к ошибке). команда! Поиск-nargs=1 звонит, setqflist ([]) | тихий выполняются "bufdo grepadd! '<args>' %" | перерисовка! –  Igorio 21.07.2014, 07:30
  • 2
    можно также просто ввести :cn или :cp переключаться на следующий документ. –  phyatt 10.04.2017, 23:36

Это - на самом деле поведение по умолчанию, хотя может быть трудно заметить: попробовать * затем изменитесь на другую вкладку и использование n ответ N в командном режиме для перехода вперед и назад между поисковыми хитами.

Это может иметь больше смысла сначала при включении выделения для всех хитов:

:set hlsearch
7
27.01.2020, 19:48
  • 1
    +1 только из-за hlsearch то, что я не знал, и который у меня будет поиск в течение одного дня или другого :-). Однако по умолчанию я попробовал * #, n и N, и он не переходит к другим буферам файлов... –  Stephane Rolland 03.01.2013, 17:10
  • 2
    Нет, n и N не переходите буферы (они повторяются), но термин, для которого они предназначаются, разыскивается на всех вкладках; хит * с выделением на затем цикле через Ваши вкладки - они будут все выделены с тем же термином, таким образом, можно будет использовать n и N локально там без нового поиска. –  goldilocks 03.01.2013, 17:28
  • 3
    Самому главному НЕ придется циклически повториться через Ваши вкладки для нахождения всех соответствий. –  Magnus 26.06.2014, 21:16
  • 4
    @Magnus, В то время как это может быть предпочтительно, это на самом деле явно не указано в вопросе, который спрашивает, как "расширить этот поиск до... всех буферов"-> это расширяется через все буферы. Точка моего ответа должна была ясно дать понять это, так как это не могло бы быть, особенно если Вы не имеете hlsearch набор. –  goldilocks 26.06.2014, 21:33
 :bufdo vimgrepadd yoursearchterm % | copen
4
27.01.2020, 19:48

Поскольку я делал часто это, я смял (improvable) сценарий.

Вы или кто-то еще могли бы найти это полезным.


Короткое объяснение:

В основном это ищет буферный список и выставочный результат в quickfix-окне.

Две основных команды добавляется.

  1. Поиск <образец> : Искать все буферы <образец> .
  2. Search1 <образец> : Искать все буферы <образец> , но только показать первый результат для каждого буфера. Обычно полезный для списка всех буферов, где функция, переменная нечто используется, (или что когда-либо).

удар Использования (: Искать! нечто ) для добавления к результатам.

Дополнительно GSearch и GSearch1 добавляется, где различие - то, что с Поиск сценарий добавляет regex разделитель, например:

foo -> /foo/

, Где как GSearch ожидают, что это будет включено.

флаг j всегда добавляется для предотвращения перехода.


Код:

существуют некоторые взломы для предотвращения списка ошибок, одновременно сохраняя код коротким. попытка / выгода была немного громоздкой на bufdo.

let s:not_idents = split("/!#$%&\"`´¨'¯()*+,-.:;<=>?¿@[\]^{|}µ¶·¸~±×÷®©«»¬­ª°º¹²³¼½¾", '\zs')
" Create a delimited pattern. "
fun! s:Parse_pat(pat)
    for c in s:not_idents
        if stridx(a:pat, c) == -1
            return c . a:pat . c
        endif
    endfor
    echohl Error
    echom "Could not delimit pattern '". a:pat ."'"
    echohl None
    return ''
endfun

fun! s:AllBufSearch(pat, bang, uno, isg)
    if a:isg
        let pat = a:pat
    else
        let pat = s:Parse_pat(a:pat)
    endif
    if pat == ''
        return
    endif
    cclose
    let [_buf, _view] = [bufnr("%"), winsaveview()]
    let _foldenable = &foldenable
    set nofoldenable

    " Copy of current qflist. "
    let qfc = getqflist()
    " Hack to prevent error if no matches. "
    call setqflist([{}])
    silent execute "bufdo vimgrepadd! " . pat . "j %"
    " Restore "
    exec "buffer " . _buf
    let &foldenable = _foldenable
    call winrestview(_view)
    " Fix "
    let qf = getqflist()
    call remove(qf, 0)
    " Only one listing per buffer. "
    if a:uno
        let bn = {}
        let i  = 0
        for m in qf
            if has_key(bn, m["bufnr"])
                call remove(qf, i)
            else
                let bn[m["bufnr"]] = 1
                call remove(qf[i], "valid")
                let i += 1
            endif
        endfor
    endif
    if a:bang == "!"
        let qf = qfc + qf
    endif
    " If any matches, copen. "
    if len(qf)
        call setqflist(qf)
        copen
    endif
endfun

command! -nargs=1 -bang Search   call s:AllBufSearch(<q-args>, "<bang>", 0, 0)
command! -nargs=1 -bang Search1  call s:AllBufSearch(<q-args>, "<bang>", 1, 0)
command! -nargs=1 -bang GSearch  call s:AllBufSearch(<q-args>, "<bang>", 0, 1)
command! -nargs=1 -bang GSearch1 call s:AllBufSearch(<q-args>, "<bang>", 1, 1)
1
27.01.2020, 19:48

Теги

Похожие вопросы