Переміщення серії файлів у 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 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

Ви краще версію своїх файлів і зробите різницю після такої зміни.

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

Для більш детального введення в список швидкого виправлення щодо пошуку у файлах див. у розділі моя відповідь на питання " Завантаження набору отриманих файлів через cmd-exec у буфер VIM . "

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

:args apple*.js

а потім переходити між ними за допомогою : n та : N , як завжди.

1
додано