Как эффективно работать с несколькими файлами в Vim?

Я начал использовать Vim для разработки скриптов Perl, и я начинаю находить его очень мощным.

Одна вещь, которая мне нравится, - иметь возможность открывать сразу несколько файлов, например. vi main.pl maintenance.pl, а затем переместите между ними:

:n
:prev

и посмотрите, какой файл открыт с помощью

:args

И чтобы добавить файл, я могу сказать:

:n test.pl

который, как я ожидал, будет добавлен к моему списку файлов, но вместо этого он уничтожит мой текущий список файлов, и когда я набираю :args, у меня есть только test.pl open.

Итак, как я могу добавлять и удалять файлы в свой список args?

+962
10 сент. '08 в 9:03
источник поделиться
27 ответов

Почему бы не использовать вкладки (введенные в Vim 7)? Вы можете переключаться между вкладками с :tabn и :tabp, С помощью :tabe <filepath> вы можете добавить новую вкладку; и с регулярным :q или :wq вы закрываете вкладку. Если вы сопоставляете :tabn и :tabp с клавишами F7/F8, вы можете легко переключаться между файлами.

Если файлов не так много или у вас нет Vim 7, вы также можете разделить экран на несколько файлов: :sp <filepath>. Затем вы можете переключаться между splitscreens с помощью Ctrl + W, а затем клавиши со стрелкой в ​​направлении, которое вы хотите переместить (или вместо клавиш со стрелками, W для следующего и W для предыдущего splitscreen)

+1046
10 сент. '08 в 9:09
источник

Связанные вопросы


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

Список

Чтобы просмотреть список текущих буферов, я использую:

:ls

Открытие

Чтобы открыть новый файл, я использую

:e ../myFile.pl

с расширенным завершением вкладки (поместите set wildmenu в .vimrc).

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


Переключение

Чтобы переключиться между всеми открытыми файлами, я использую

:b myfile

с расширенным завершением вкладки (все еще set wildmenu).

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


Использование окон

Ctrl-W s и Ctrl-W v, чтобы разделить текущее окно по горизонтали и по вертикали. Вы также можете использовать :split и :vertical split (:sp и :vs)

Ctrl-W w для переключения между открытыми окнами и Ctrl-W h (или j или k или l) для навигации по открытым окнам.

Ctrl-W c закрыть текущее окно и Ctrl-W o закрыть все окна, кроме текущего.

Запуск vim с флагом -o или -o открывает каждый файл в своем собственном расколе.


Со всем этим мне не нужны вкладки в Vim, и мои пальцы находят мои буферы, а не мои глаза.

Примечание. Если вы хотите, чтобы все файлы переходили в тот же экземпляр Vim, запустите Vim с опцией --remote-silent.

+489
10 сент. '08 в 9:47
источник
:ls

для списка открытых буферов

  • :bp предыдущий буфер
  • :bn Следующий буфер
  • :bn (n число) переместитесь в n-й буфер
  • :b <filename-part> с вкладкой-ключом, обеспечивающей автозаполнение (awesome!!)

В некоторых версиях vim bn и bp на самом деле bnext и bprevious соответственно. В этом случае полезно включить автозаполнение.

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

Кроме того, вы можете сохранять сеансы vim

:mksession! ~/today.ses

Вышеприведенная команда сохраняет текущие буферы и настройки открытых файлов на ~/today.ses. Вы можете загрузить этот сеанс, используя

vim -S ~/today.ses

Никаких хлопот, вспоминая, где вы остановились вчера.;)

+201
15 сент. '08 в 19:03
источник

Чтобы добавить в список args:

:argadd

Чтобы удалить из списка args:

:argdelete

В вашем примере вы можете использовать :argedit test.pl, чтобы добавить test.pl в список args и отредактировать файл за один шаг.

:help args дает гораздо более подробную информацию и расширенное использование

+96
10 сент. '08 в 9:34
источник

Я использую команды буфера - :bn (следующий буфер), :bp (предыдущий буфер) :buffers (список открытых буферов) :b<n> (открыть буфер n) :bd (удалить буфер). :e <filename> просто откроется в новый буфер.

+45
10 сент. '08 в 9:43
источник

Я думаю, вы можете использовать неправильную команду для просмотра списка файлов, которые вы открыли.

Попробуйте сделать :ls, чтобы просмотреть список файлов, которые вы открыли, и вы увидите:

   1 %a   "./checkin.pl"            line 1
  2 #    "./grabakamailogs.pl"     line 1
  3      "./grabwmlogs.pl"         line 0
  etc.

Затем вы можете отскакивать через файлы, ссылаясь на них по указанным цифрам, например. : 3b

или вы можете разделить экран, введя номер, но используя sb вместо просто b.

В качестве стороннего% относится к файлу, который в настоящее время виден, а # относится к альтернативному файлу.

Вы можете легко переключаться между этими двумя файлами, нажав Ctrl Shift 6

Изменить: например, :ls вы можете использовать :reg, чтобы просмотреть текущее содержимое ваших регистров, включая регистры 0-9, содержащие то, что вы удалили. Это особенно полезно, если вы хотите повторно использовать текст, который вы ранее удалили.

+36
10 сент. '08 в 9:34
источник

Vim (но не оригинальный Vi!) имеет вкладки, которые я нахожу (во многих контекстах) выше буферов. Вы можете сказать :tabe [filename], чтобы открыть файл на новой вкладке. Переключение между вкладками осуществляется щелчком по вкладке или комбинациями клавиш [n] gt и gt. Графический Vim даже имеет графические вкладки.

+30
10 сент. '08 в 9:07
источник

Такие вещи, как :e и :badd, будут принимать только один аргумент ONE, поэтому следующее не будет выполнено

:e foo.txt bar.txt
:e /foo/bar/*.txt
:badd /foo/bar/*

Если вы хотите добавить несколько файлов из vim, используйте arga[dd]

:arga foo.txt bar.txt
:arga /foo/bar/*.txt
:argadd /foo/bar/*
+23
08 дек. '11 в 19:43
источник

Здесь много ответов! То, что я использую, не изобретая колесо - самые известные плагины (которые не собираются умирать в ближайшее время и используются многими людьми), чтобы быть очень быстрыми и вызывающими.

  • ctrlpvim/ctrlp.vim - найти файл по имени нечеткий поиск по его местоположению или просто по имени
  • jlanzarotta/bufexplorer - для просмотра открытых буферов (когда вы не помните, сколько файлов вы открыли и недавно изменили, и вы не помните, где они находятся, вероятно, потому, что вы искали их с помощью Ag)
  • rking/ag.vim для поиска файлов по отношению к gitignore
  • scrooloose/nerdtree, чтобы увидеть структуру каталогов, просмотреть, добавить/удалить/изменить файлы.

UPDATE: Недавно я использую dyng/ctrlsf.vim для поиска в контекстном представлении (например, Sublime search), и я переключил движок с ag на ripgrep. Производительность невыполнима.

+21
31 мар. '16 в 11:47
источник

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

Вот хорошее резюме, которое я вытащил из статьи:

Краткое описание:

  • Буфер - это текст в памяти файла.
  • Окно представляет собой окно просмотра в буфере.
  • Страница закладки - это коллекция окон.
+15
18 июн. '15 в 12:47
источник

При использовании нескольких файлов в vim я использую эти команды в основном (с открытыми ~ 350 файлами):

  • :b <partial filename><tab> (переход в буфер)
  • :bw (удаление буфера, удаление буфера)
  • :e <file path> (отредактируйте, откройте новый буфеp >
  • pltags - включить переключение в подпрограммы/определения методов
+14
15 сент. '08 в 17:15
источник

Вы можете использовать глобальные отметки Vim.

Таким образом, вы можете быстро отскакивать между файлами и даже до отмеченного местоположения в файле. Кроме того, ключевые команды короткие:   'C возвращает меня коду, с которым я работаю,  'T возвращает меня к unit test, с которым я работаю.

Когда вы меняете места, сброс меток также очень быстрый:   mC обозначает новое кодовое пятно,  mT обозначает новое тестовое место.

+13
08 июл. '13 в 21:37
источник

Я использую тот же файл .vimrc для GVim и командной строки vim. Я стараюсь использовать вкладки в GVim и буферах в командной строке vim, поэтому у меня установлен мой .vimrc, чтобы упростить работу с ними обоими:

" Movement between tabs OR buffers
nnoremap L :call MyNext()<CR>
nnoremap H :call MyPrev()<CR>

" MyNext() and MyPrev(): Movement between tabs OR buffers
function! MyNext()
    if exists( '*tabpagenr' ) && tabpagenr('$') != 1
        " Tab support && tabs open
        normal gt
    else
        " No tab support, or no tabs open
        execute ":bnext"
    endif
endfunction
function! MyPrev()
    if exists( '*tabpagenr' ) && tabpagenr('$') != '1'
        " Tab support && tabs open
        normal gT
    else
        " No tab support, or no tabs open
        execute ":bprev"
    endif
endfunction

Это связывает существующие сопоставления для H и L, но делает переключение между файлами очень быстрым и легким. Просто нажмите "H" для следующего и "L" для предыдущего; используете ли вы вкладки или буферы, вы получите ожидаемые результаты.

+12
17 сент. '08 в 14:43
источник

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

+11
15 сент. '08 в 14:39
источник

Мой способ эффективно работать с несколькими файлами - использовать tmux.

Он позволяет разбивать окна по вертикали и по горизонтали, например:

enter image description here

У меня он работает так на моих компьютерах mac и linux, и я нахожу его лучше, чем собственный механизм переключения окон, который предоставлен (на компьютерах Mac). Я считаю, что переход проще и только с tmux я смог получить "новую страницу в том же текущем каталоге", работающую на моем mac (несмотря на то, что, кажется, есть варианты для открытия новых панелей в том же каталоге), который удивительно критическая часть. Новейшее новое место в текущем месте удивительно полезно. Метод, который делает новые панели с теми же ключевыми комбо для обеих ОС, имеет для меня решающее значение и бонус для всех для будущей личной совместимости. Помимо нескольких панелей tmux, я также попытался использовать несколько вкладок, например. enter image description here и несколько новых окон, например. enter image description here и, в конечном счете, я обнаружил, что несколько панелей tmux станут для меня самыми полезными. Я очень "визуальный" и люблю держать свои различные контексты прямо передо мной, соединенными вместе как панели.

tmux также поддерживает горизонтальные и вертикальные панели, которые более старые screen не сделали (хотя mac iterm2, похоже, поддерживает его, но опять же, текущая настройка каталога для меня не работала). tmux 1.8

+8
19 янв. '14 в 18:24
источник

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

nnoremap <Leader>f :set nomore<Bar>:ls<Bar>:set more<CR>:b<Space>

Он отлично сочетает в себе команды :ls и :b - перечисление всех открытых буферов и ожидание ввода команды для переключения буфера.

Учитывая приведенное выше отображение в vimrc, как только вы наберете <Leader>f,

  • Отображаются все открытые буферы
  • Ты можешь:
    • Тип 23 переходит в буфер 23,
    • Введите # чтобы перейти в альтернативный буфер /MRU,
    • Введите частичное имя файла, затем введите <Tab> или <Ci> для автозаполнения,
    • Или просто <CR> или <Esc> чтобы оставаться в текущем буфере

Снимок вывода для приведенного выше сопоставления клавиш:

:set nomore|:ls|:set more
  1  h    "script.py"    line 1
  2 #h  + "file1.txt"    line 6  -- '#' for alternative buffer
  3 %a    "README.md"    line 17 -- '%' for current buffer
  4       "file3.txt"    line 0  -- line 0 for hasn't switched to
  5     + "/etc/passwd"  line 42 -- '+' for modified
:b '<Cursor> here'

В приведенном выше снимке:

  • Второй столбец: %a для текущего, h для скрытых, # для предыдущего, пустой для не был переключен.
  • Третий столбец: + для модифицированных.

Кроме того, я настоятельно рекомендую set hidden. См. :help 'hidden'.

+6
20 июн. '17 в 8:37
источник

Добавление другого ответа, поскольку это не подлежит ни одному из ответов

Чтобы изменить все буферы на tab.

 :tab sball

откроет все буферы для просмотра табуляции. Затем мы можем использовать любые команды, связанные с вкладкой

gt or :tabn           "    go to next tab
gT or :tabp or :tabN  "    go to previous tab

подробнее :help tab-page-commands.

Мы можем проинструктировать vim открыть в виде табуляции несколько файлов vim -p file1 file2. alias vim='vim -p' будет полезен.
То же самое можно добиться и после автокоманды в ~/.vimrc

 au VimEnter * if !&diff | tab all | tabfirst | endif

В любом случае, чтобы ответить на вопрос: добавить в список arg: arga file,

Чтобы удалить из списка arg: argd pattern

Больше в :help arglist

+5
05 июл. '17 в 20:02
источник

Я использую следующее: это дает вам множество функций, которые вы ожидаете иметь в других редакторах, таких как Sublime Text/Textmate

  • Используйте буферы, а не "вкладки". Буферы - это та же концепция, что и вкладки практически во всех других редакторах.
  • Если вам нужен одинаковый вид наличия вкладок, вы можете использовать плагин vim-airline со следующей настройкой в ​​.vimrc: let g:airline#extensions#tabline#enabled = 1. Это автоматически отображает все буферы в виде заголовков вкладок, когда у вас нет открываемых страниц.
  • Используйте Tim Pope vim-unimpaired, который дает [ b и ] b для перехода к предыдущему/следующему буферов соответственно (плюс целый ряд других лакомств).
  • У вас set wildmenu в вашем .vimrc, а затем, когда вы вводите :b <file part> + Tab для буфера, вы получите список возможных буферов, которые вы можете использовать стрелки влево/вправо для прокрутки
  • Используйте Tim Pope vim-obsession плагин для хранения сессий, которые хорошо сочетаются с авиакомпанией (у меня много боли с сеансами и плагинами)
  • Используйте плагин Tim Pope vim-vinegar. Это работает с нативным :Explore, но с ним намного проще работать. Вы просто набираете -, чтобы открыть проводник, который является тем же самым ключом, что и поиск каталога в проводнике. Делает навигацию быстрее (однако с fzf я редко использую это)
  • fzf (который может быть установлен как плагин vim) также является действительно мощным нечетким поиском, который вы можете использовать для поиска файлов (и буферов). fzf также играет очень красиво с fd (более быстрая версия поиска)
  • Используйте Ripgrep с vim-ripgrep для поиска по вашей базе кода, а затем вы можете использовать :cdo для результатов поиска и замены
+4
19 авг. '17 в 10:31
источник

Я использую несколько буферов, которые скрыты в моем файле ~/.vimrc.

Проводник мини-буфера script тоже хорош, чтобы получить хороший компактный список ваших буферов. Затем :b1 или :b2... перейдите в соответствующий буфер или используйте проводник мини-буфера и перейдите по буферам.

+4
16 сент. '08 в 19:05
источник

Я использую командную строку и git много, поэтому у меня есть этот псевдоним в моем bashrc:

alias gvim="gvim --servername \$(git rev-parse --show-toplevel || echo 'default') --remote-tab"

Это откроет каждый новый файл на новой вкладке в существующем окне и создаст одно окно для каждого репозитория git. Итак, если вы откроете два файла из репо A и 3 файла из репо B, вы получите два окна: один для репо A с двумя вкладками и один для репо B с тремя вкладками.

Если файл, который вы открываете, не содержится в репозитории git, он перейдет в окно по умолчанию.

Для перехода между вкладками я использую эти сопоставления:

nmap <C-p> :tabprevious<CR>
nmap <C-n> :tabnext<CR>

Чтобы открыть сразу несколько файлов, вы должны объединить это с одним из других решений.

+3
03 июл. '14 в 14:08
источник

попробуйте следующие карты для удобства редактирования нескольких файлов

"разделенные окна

nmap <leader>sh :leftabove vnew<CR>

nmap <leader>sl :rightbelow vnew<CR>

nmap <leader>sk :leftabove new<CR>

nmap <leader>sj :rightbelow new<CR>

"перемещение

nmap <C-j> <C-w>j

nmap <C-k> <C-w>k

nmap <C-l> <C-w>l

nmap <C-h> <C-w>h

+3
07 янв. '14 в 5:55
источник

Я сделал очень простое видео, показывающее рабочий процесс, который я использую. В основном я использую Ctrl-P плагин Vim, и я отобразил навигацию буфера на клавишу Enter.

Таким образом, я могу нажать Enter в обычном режиме, посмотреть список открытых файлов (который отображается в маленьком новом окне в нижней части экрана), выбрать файл, который я хочу изменить, и снова нажать Enter. Чтобы быстро выполнить поиск по нескольким открытым файлам, просто введите часть имени файла, выберите файл и нажмите Enter.

У меня не так много файлов, открытых в видео, но это становится невероятно полезным, когда вы начинаете много.

Поскольку плагин сортирует буферы с использованием заказа MRU, вы можете просто нажать Enter дважды и перейти к самому последнему файлу, который вы редактировали.

После установки плагина необходима только одна конфигурация:

nmap <CR> :CtrlPBuffer<CR>

Конечно, вы можете сопоставить его с другим ключом, но я считаю, что отображение будет очень удобным.

+2
05 дек. '15 в 18:59
источник

если вы используете osx и хотите, чтобы вы могли нажимать на ваши вкладки, используйте MouseTerm и SIMBL (взятые из здесь). Кроме того, ознакомьтесь с этим обсуждением.

+1
31 мая '13 в 9:33
источник

Вы можете быть абсолютным сумасшедшим и псевдонимом vim до vim -p, добавив в свой .bashrc:

alias vim="vim -p"

Это приведет к открытию нескольких файлов из оболочки в закладках, без необходимости вызывать :tab ball изнутри vim.

+1
20 окт. '17 в 22:37
источник

Когда я начал использовать VIM, я не понимал, что вкладки должны использоваться как разные макеты окон, а буфер служит ролью для множественного редактирования/переключения файлов между собой. На самом деле в начале вкладки даже не были до версии v7.0, и я только что открыл один VIM внутри вкладки терминала (я использовал гном-терминал в данный момент) и переключался между вкладками, используя alt + numbers, так как я думал, используя команды вроде: buffers,: bn и: bp были слишком много для меня. Когда был выпущен VIM 7.0, мне было проще управлять большим количеством файлов и переключиться на него, но в последнее время я просто понял, что буферы всегда должны быть в пути, если только одно: вам нужно настроить его, чтобы он работал правильно.

Итак, я попробовал vim-авиакомпанию и включил визуальную верхнюю вкладку, такую ​​как буферная панель, но у графика возникла проблема с моим iTerm2, поэтому я попробовал пару других, и кажется, что MBE работает лучше всего для меня. Я также устанавливаю shift + h/l как ярлыки, так как исходные (перемещение к голове/хвосту текущей страницы) для меня не очень полезны.

map <S-h> :bprev<Return>
map <S-l> :bnext<Return>

Кажется, что еще проще, чем gt и gT, и: e проще, чем: tabnew. Я нахожу: bd не так удобен, как: q хотя (у MBE есть некоторые проблемы с ним), но я могу жить со всеми файлами в буфере, которые, как я думаю.

+1
13 апр. '15 в 2:46
источник

Я бы предложил использовать плагин

NERDtree

Вот ссылка github с инструкциями.

Nerdtree

Я использую vim-plug как менеджер плагинов, но вы также можете использовать Vundle.

ВИМ-штекером

Vundle

0
03 июн. '18 в 23:52
источник

Большинство ответов в этом потоке используют простые команды vim, которые, конечно, прекрасны, но я думал, что предоставил бы обширный ответ, используя комбинацию плагинов и функций, которые я нахожу особенно полезными (по крайней мере некоторые из этих советов пришли из советы по навигации по файлам Gary Bernhardt):

  • Чтобы переключиться между последними двумя файлами, просто нажмите <leader> дважды. Я рекомендую назначить <leader> пробелу:

    nnoremap <leader><leader> <c-^>
    
  • Для быстрого перемещения по проекту ответ является нечетким согласующим решением, таким как CtrlP. Я привязываю его к <leader>a для быстрого доступа.

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

  • Если я хочу просмотреть файловую систему, я бы использовал командную строку или внешнюю утилиту (Quicklsilver, Afred и т.д.), но чтобы посмотреть на текущую структуру проекта Дерево NERD - это классика. Не используйте это, хотя вместо 2 в качестве основного метода поиска файлов. Это действительно замедлит вас. Я использую привязку <leader>ff.

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

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

    set winwidth=84
    set winheight=5
    set winminheight=5
    set winheight=999
    
    nnoremap <C-w>v :111vs<CR>
    nnoremap <C-w>s :rightbelow split<CR>
    set splitright
    
  • С легкостью переходите из split to split:

    nnoremap <C-J> <C-W><C-J>
    nnoremap <C-K> <C-W><C-K>
    nnoremap <C-L> <C-W><C-L>
    nnoremap <C-H> <C-W><C-H>
    
0
27 февр. '16 в 12:04
источник

Посмотрите другие вопросы по меткам или Задайте вопрос