Навигация по сериям файлов в Vim

При изменении кода я нахожу, что мне часто приходится проходить через десятки файлов, чтобы изменить самые простые вещи. Например, скажем, у меня есть функция pretty_print , и я меняю ее, чтобы соответствовать верблюдному футляру prettyPrint . Теперь я хочу просмотреть файлы apple1.js в apple99.js и, возможно, несколько orange.js файлов там. Есть ли быстрый способ сделать это в Vim?

ПРИМЕЧАНИЕ. Это не то, что я могу автоматизировать, мне действительно нужно войти и изменить код сам.

I know I can do :b , but, although it supports name completion/pattern matching, I don't think the pattern is carried over.

Например, если я это сделаю

:b apple*.js

и я ударил вкладку, я получу

:b apple1.js

но если я перейду к этой функции (либо нажав : + upArrow, либо q: )), то, если я нажму вкладку, она не пойдет в

:b apple2.js

Я хочу указать что-то вроде

:b apple*.js

отредактируйте файл, затем, когда я наберу : w , он переместится в следующий буфер. Я бы предпочел остаться в Vim, я не хочу выходить, введите vim apple * .js , вернитесь в Vim и затем используйте команду : x . Я понимаю, что это работает, но мне все еще нужны все другие файлы, если я хочу, например, прыгать между тегами.

3

3 ответы

начните с этого:

:set hidden "required because `argdo` won't load next argument into current window
            "if there is a modified buffer displayed inside this window
:args apple*.js
:argdo %s/\/prettyPrint/g
:rewind " if you want to proofread all files then use :next and :prev
:wa

Вы лучше можете обновить свои файлы и выполнить diff после такого изменения.

1
добавлено

Использует ли BufSel функцию Wikia для ваших нужд?

Если вы предпочитаете выбирать буфер из списка   частичные совпадения можно использовать следующую функцию. Он прыгнет в   буфере сопоставления, если найдено только одно совпадение, или если их много   соответствует ему, будет распечатываться список соответствующих буферов в   области командной строки и позволяет выбрать один из соответствующих буферов   по номеру буфера.

function! BufSel(pattern)
  let bufcount = bufnr("$")
  let currbufnr = 1
  let nummatches = 0
  let firstmatchingbufnr = 0
  while currbufnr <= bufcount
    if(bufexists(currbufnr))
      let currbufname = bufname(currbufnr)
      if(match(currbufname, a:pattern) > -1)
        echo currbufnr . ": ". bufname(currbufnr)
        let nummatches += 1
        let firstmatchingbufnr = currbufnr
      endif
    endif
    let currbufnr = currbufnr + 1
  endwhile
  if(nummatches == 1)
    execute ":buffer ". firstmatchingbufnr
  elseif(nummatches > 1)
    let desiredbufnr = input("Enter buffer number: ")
    if(strlen(desiredbufnr) != 0)
      execute ":buffer ". desiredbufnr
    endif
  else
    echo "No matching buffers"
  endif
endfunction

"Bind the BufSel() function to a user-command
command! -nargs=1 Bs :call BufSel("")
1
добавлено
Я фактически установил BufSel и использовал его сначала, но потом сдался, интересно, делает ли он то, что я хочу здесь. В любом случае, это не было большим улучшением по сравнению с : b , и оказалось, что было намного проще закрыть vim и перезапустить его только с файлами, которые я хотел отредактировать.
добавлено автор puk, источник

Probably the most suitable solution for you in this case would be to use the grep capabilities integrated in Vim. The following command performs a search for the pattern \ in files matching the wildcard apple*.js, and stores locations of the pattern's occurrences in the quickfix list allowing to easily jump through all the matches.

:vimgrep /\/ apple*.js

Более подробное введение в список quickfix для поиска в файлах, см. мой ответ на вопрос « Загрузка набора полученных файлов через cmd-exec в буферы Vim ".

Если вы хотите просто открыть список файлов, соответствующих определенному подстановочный знак, загружать имена файлов в список аргументов

:args apple*.js

а затем перемещайтесь между ними, используя : n и : N , как обычно.

1
добавлено