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


1101

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

Мне нравится то, что я могу открывать несколько файлов одновременно:

vi main.pl maintenance.pl

и затем прыгайте между ними:

:n
:prev

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

:args

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

:n test.pl

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

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


5
tmux ... используйте vim на каждой панели
Tommy

4
@Tommy: таким образом вы не можете вставить извлеченный / удаленный контент между файлами (буфер vims). Если доступно, может помочь только буфер обмена (см. Принятый ответ: stackoverflow.com/questions/5532878/… )
ChristophS

1
:Nкажется, более простой способ перейти к предыдущему файлу ...
Герт ван ден Берг

vimcasts.org/categories/the-argument-list ? VimCasts действительно очень рекомендуется при изучении Vim.
mcepl

Ответы:


1172

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

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


72
Чтобы сохранить и закрыть вкладку, вы также можете использовать ZZвместо :wq(точно так же, как при обычном сохранении и закрытии)
Андреас Греч

40
Я использую пакет vim-gnome в Ubuntu 10.10, и я могу переключаться между вкладками, используя Ctrl + PageUp и Ctrl + PageDown. Мне не нужно было ничего настраивать; это было по умолчанию.
Джои Адамс

268
Также в режиме редактирования gtпереходит на следующую вкладку и gTпереходит на предыдущую вкладку.
Декан

40
Вы можете перейти на любую вкладку с помощью ngt, где n - индекс вкладки (начиная с единицы). Я думаю, что есть опция, которая отображает индекс каждой вкладки рядом с именем файла, но я не знаю, что это такое. Если кто-нибудь знает, я хотел бы услышать это.
указатель на пустоту

81
Также обратите внимание, что вы можете использовать этот -pфлаг, чтобы открывать несколько файлов на вкладках из командной строки. Например, gvim -p main.pl maintenance.plоткроются эти два файла во вкладках.
Мэтью Строубридж

555

Листинг

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

: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параметром.


4
Если вы играете с несколькими буферами, я бы порекомендовал LustyJuggler .
Арун М

1
Спасибо за очень хороший краткий справочник по командам vim, наиболее часто используемым при работе с несколькими файлами.
кв

9
:bэто очень мощная команда, потому что она может принимать как номера буферов, так и имена буферов в качестве аргументов. Что еще? Он также поддерживает завершение табуляции в любой части имени файла. Скажем, у вас открыт файл foo.txt в буфере 2, вы можете напечатать :b 2<Enter>или :b foo.txtили :b oo<Tab><Enter>отредактировать этот файл. Да, последний из них будет завершать «oo» до «foo.txt», когда вы нажимаете <Tab>.
Susam Pal

21
У меня есть эта строка в моей .vimrc: nnoremap gb :ls<cr>:b<space>. Когда я печатаю gbв командном режиме, в нем перечислены мои открытые буферы и типы :b , готовые начать вводить имя / номер буфера.
nkorth

5
Также стоит упомянуть, что :bбудет принимать совпадение подстроки, если оно однозначно. Так что, если у вас есть открытые файлы foo, barи baz, :b zдостаточно просто переключить вас в bazбуфер, и :b ooили :b oприведет вас в fooбуфер.
Сорен Бьорнстад

233
:ls

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

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

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

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

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

:mksession! ~/today.ses

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

vim -S ~/today.ses

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


перейти к определенному буферу: N CTRL- ^
Том Ян

8
@shyam Я думаю, что люблю тебя! Почему-то я никогда не знал наверняка о команде mksession, но сегодня совершенно неожиданно я решил, что ДОЛЖЕН быть какой-то способ сохранить список файлов, чтобы их можно было легко открыть. Это даже лучше, так как кажется, что оно хранит полное состояние вещей (разделение окон, расположение буфера и т. Д.). Тогда спасибо!
Kasapo

Кроме того, используйте "метку, чтобы перейти к тому месту, где вы были в файле в прошлый раз.
Хром

113

Добавить в argsсписок:

:argadd

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

:argdelete

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

:help args дает гораздо больше деталей и расширенного использования


4
Это действительно ответ на заданный вопрос, хотя, учитывая заголовок, остальные ответы совершенно справедливы.
Сорен Бьорнстад

48

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


18
: ls быстрее чем: buffers
aehlke

42

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

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

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

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

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

Aside% относится к текущему файлу, а # относится к альтернативному файлу.

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

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


2
Приятно видеть в стороне связанную информацию, такую ​​как% и #. +1
Ашиш

35

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


1
Спасибо, звучит отлично, но у нас, к сожалению, только VIM 6.1 установлен на сервере.
Эдвард Тангей

1
Вкладки очень удобны с подстановочными знаками vim -p dir/*. Максимальный размер вкладки составляет 10, но вы можете изменить его в ~/.vimrcнастройке tabpagemaxна другое значение.
Кампа

27

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

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

РЕДАКТИРОВАТЬ: Недавно я использовал dyng / ctrlsf.vim для поиска с контекстным представлением (как Sublime search), и я переключил движок с ag на ripgrep . Производительность выдающаяся.

EDIT2: Наряду с CtrlSF вы можете использовать mg979 / vim-visual-multi , вносить изменения в несколько файлов одновременно, а затем в конце сохранять их за один раз.


2
ctrlp перемещен и теперь находится в ctrlpvim / ctrlp.vim
Дейв

1
Это правильный ответ! Почему у него нет больше голосов?
Томас Мебиус

2
У него нет больше голосов, потому что вопрос был задан в 2008 году. :)
burnettk

точно. Я не могу представить vim в настройках разработчика без этих плагинов.
Эдгар Аллоро

25

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

: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/*

21

Некоторые ответы в этой теме предлагают использовать вкладки, а другие предлагают использовать буфер для достижения той же цели. Вкладки и буферы разные. Я настоятельно рекомендую вам прочитать эту статью " Vim Tab Madness - Buffers vs Tabs ".

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

Резюме:

  • Буфер - это текст файла в памяти.
  • Окно - это окно просмотра в буфере.
  • Закладка представляет собой набор окон.

2
Вы получите это резюме, набрав :help windowв Vim
icc97

19

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

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

2
350 файлов !!! Это впечатляет. Как найти правильный буфер для перехода? Вы когда-нибудь делали шпагат?
Брайан О'Делл

3
@ BrianO'Dell :b <partial filename><tab>плюс set wildmenuв ваших .vimrcработах хорошо, когда у вас есть тонны открытых буферов. Затем вы просто частично сопоставляете и просматриваете те, которые он находит. В других приличных редакторах у вас есть нечеткое нахождение, но обычно вы не можете ограничить это нечеткое нахождение только файлами, которые вы открыли.
icc97

17

Добавление другого ответа, так как это не охватывается ни одним из ответов

Чтобы изменить все буферы для 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

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

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

Больше на :help arglist


16

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

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

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


12

Я использую тот же файл .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для предыдущего; используете ли вы вкладки или буферы, вы получите ожидаемые результаты.


1
Мне нравятся эти сопоставления. Также попробуйте Ctrl-H, Ctrl-L. Я устанавливаю Firefox и терминал gnome с одинаковыми сопоставлениями. Очень приятно иметь последовательные сочетания клавиш.
cmcginty

4
используйте ваш ключ лидера вместо ctrl, чтобы избежать путаницы в существующих сопоставлениях
aehlke

10

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


9

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

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

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

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

  • Все открытые буферы отображаются
  • Вы можете:
    • Тип, 23чтобы перейти к буферу 23,
    • Введите, #чтобы перейти к альтернативному буферу / MRU,
    • Введите частичное имя файла, затем введите <Tab>или <C-i>для автозаполнения,
    • Или просто <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'.


Эта великолепная идея! Я пользуюсь :bи :lsмного но самостоятельно. Я думаю, что это становится менее полезным, когда у вас больше буферов, чем страница, но тогда вы все равно можете просто вернуться к:b
icc97

Рад, что это помогает. Ура! :)
qeatzy

Из этой вики Vim вы можете немного сократить ее nnoremap <leader>f :ls<cr>:b<space>, что может привести к проблемам с командой «more»
icc97

Да, этот способ отлично работает, если открыто меньше файлов (обычный вариант использования). set moreматериал имеет значение только тогда, когда открыто много файлов (более одной страницы), например vim /usr/include/*, хотя и менее полезно.
Китси

8

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

  1. Используйте буферы, а не «вкладки». Буферы - это та же концепция, что и вкладки почти во всех других редакторах.
  2. Если вы хотите , один и тот же вид , имеющий вкладки вы можете использовать ВИМ-авиакомпанию плагин с помощью следующей настройки Вашего .vimrc: let g:airline#extensions#tabline#enabled = 1. Это автоматически отображает все буферы как заголовки вкладок, когда у вас нет открытых вкладок
  3. Используйте vim-unimpaired Тима Попа, который дает [bи ]bдля перехода к предыдущему / следующему буферам соответственно (плюс целый ряд других вкусностей)
  4. Есть set wildmenuв вашем .vimrcтогда , когда вы набираете :b <file part>+ Tabдля буфера , вы получите список возможных буферов , которые вы можете использовать стрелки влево / вправо , чтобы прокручивать
  5. Используйте плагин Tim Pope vim-obsession для хранения сессий, которые хорошо работают с авиакомпаниями (мне было очень больно с сессиями и плагинами )
  6. Используйте плагин vim-уксуса Тима Папы . Это работает с нативным, :Exploreно значительно облегчает работу. Вы просто набираете, -чтобы открыть проводник, это тот же ключ, что и для перехода в каталог в проводнике. Делает навигацию быстрее (однако с fzf я редко использую это)
  7. fzf (который может быть установлен как плагин vim) также является действительно мощным нечетким искателем, который вы можете использовать для поиска файлов (и буферов тоже). фзф тоже играет очень красиво с fd (более быстрая версия find)
  8. Используйте Ripgrep с vim-ripgrep для поиска по вашей базе кода, а затем вы можете использовать :cdoрезультаты для поиска и замены.

fzf и fzf-vim изменили мою жизнь, я не могу рекомендовать это достаточно. Он также очень хорошо работает на окнах, даже в консоли для нечеткого поиска файлов. В Windows используйте бэкэнд ripgrep (rg), который, по моему опыту, превосходит любой другой инструмент find / grep (например, silversearcher или окна по умолчанию, находящие, что fzf использует iirc). Вы можете использовать его для поиска по любому списку элементов: самые последние использованные файлы, открытые в данный момент буферы, строки в текущем буфере, строки в кодовой базе (cwd), теги и т. Д. Вы можете легко запрограммировать собственный нечеткий поиск по списку. Так хорошо! (Я пришел из ctrl-p и никогда не оглядывался назад)
Эмиль Врейдагс

7

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

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

введите описание изображения здесь

У меня он работает таким образом как на моих компьютерах Mac, так и на Linux, и я нахожу его лучше, чем встроенный механизм переключения оконных панелей (на Mac). Я считаю, что переключение проще, и только с помощью tmux я смог получить «новую страницу в том же текущем каталоге», работающую на моем Mac (несмотря на то, что, кажется, есть варианты для открытия новых панелей в том же каталоге), что удивительно критическая часть. Мгновенно новая панель в текущем местоположении удивительно полезна. Метод, который создает новые панели с одинаковыми комбинациями клавиш для обеих ОС, очень важен для меня и является бонусом для будущей личной совместимости. Помимо нескольких панелей tmux, я также пытался использовать несколько вкладок, напримервведите описание изображения здесь и несколько новых окон, напримервведите описание изображения здесьи в конечном итоге я обнаружил, что несколько панелей tmux являются наиболее полезными для меня. Я очень «визуален» и люблю держать свои различные контексты прямо перед собой, соединенные вместе как панели.

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


1
Мне пришлось повеселиться, когда я увидел ваш искусственный пример "нескольких окон". Надеюсь, никто так не работает :-) В любом случае, я использую tiling wm, что даже лучше (я перешел с tmux на i3wm). Просто чтобы завершить свой ответ.
lzap

1
Tmux потрясающий, и я давно использовал этот подход, но он усложняет навигацию, копирование и вставку между двумя файлами.
neallred

1
Раньше я делал это, но наличие нескольких буферов vim лучше, когда вам нужно нажать / вставить
Titou

3

Я использую командную строку и много 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

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

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


2

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

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

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


2

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

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

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

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

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

nmap <CR> :CtrlPBuffer<CR>

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


2

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

NERDtree

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

Nerdtree

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

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

Vundle


2

В моем и многих других пользователях vim лучший вариант -

  • Откройте файл, используя,

: e file_name.extension

А затем просто Ctrl + 6, чтобы перейти к последнему буферу. Или вы всегда можете нажать

: ls перечислить буфер и затем изменить буфер, используя b и номер буфера.

  • Мы делаем вертикальное или горизонтальное разделение, используя

: vsp для вертикального разделения

: sp для горизонтального раскола

А потом <C-W><C-H/K/L/j>поменять рабочий сплит.

Вы можете редактировать любой файл в любом количестве разделений.


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

1

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

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

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

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



0

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

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

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

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

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

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

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

    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
    
  2. Легко переходить от разделения к разделению:

    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

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

alias vim="vim -p"

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.