Как мне отредактировать существующий буфер в новой вкладке в vim?
51
Предположим, я начал vim так:
vim foo bar
Теперь я решаю, что я хочу, чтобы каждый из этих файлов находился на отдельной вкладке. Есть ли способ сделать это, не выходя из vim и не добавляя -pопцию в мою командную строку?
Многие из вас, вероятно, ищут, tabe %что упомянуто в ответе liuyang1 ниже.
Матеуш Пиотровский,
1
@MateuszPiotrowski Как я уже упоминал в этом комментарии к этому ответу , :tabe %он не работает с буферами, которые не имеют допустимого пути к файлу. :tab sbработает каждый раз.
JoL
Ответы:
30
Когда вы запускаете vim таким образом, вы не получаете клиента vim, текстовый редактор использует приглашение терминала или cmd - два файла находятся в двух разных буферах. Используйте :lsдля перечисления буферов:
:ls
1 %a "foo" line 6
2 "bar" line 0
% A является активным буфером. Вы можете использовать :b2для переключения в буфер 2 или использовать для перехода к :bnследующему или :bpдля предыдущего. Я предпочитаю (CTRL-W v) разделять окна по вертикали, а не (CTRL-W s), которая разделяется по горизонтали.
Если у вас загружено 2 файла и нет вкладок (пока), вы можете, :tabnewи в новой вкладке введите:b2
Если вы хотите, чтобы буферы всегда загружались в свои собственные вкладки, ознакомьтесь с этой статьей .
Итак, вы уже запустили vim таким образом, что ваши файлы хранятся в клиенте vim, а не в оболочке cmd / терминала?
DaveParillo
1
Я не уверен, что ты имеешь в виду. Я использую оболочку для запуска vim, как описано выше, а затем у меня работает vim.
InnaM
Ах! Наверное, я никогда не понимал, что буферы не являются локальными для вкладок. Я всегда думал (не особо задумываясь), что каждая вкладка имеет свой список буферов.
InnaM
На моей машине vimзапустит редактор внутри оболочки. Чтобы получить графический интерфейс пользователя VIM, я должен использовать gvim. И вы правы - буферы являются глобальными для приложения vim.
DaveParillo
47
Вы хотите открыть буфер в новой вкладке?
Разделите экран (Ctrl-W s), откройте окно и нажмите Ctrl-W T
Хм. Не совсем то, что я имел в виду, но для начала неплохо. Я еще не знал о Ctrl-w T. Конечно, на первой вкладке все равно будет два буфера.
InnaM
Нет. После того, как вы разделите экран на два окна и откроете одно из них на новой вкладке, он уходит с первой вкладки. Это не останется (по крайней мере, на моем gvim72). Что касается буферов, они не связаны с окнами / вкладками ... они больше похожи на память, где vim хранит содержимое файла.
Ладья
Ах! Вы правы. Я неверно истолковал вывод :ls.
InnaM
Кроме того, Ctrl-W V разбивает окно по вертикали.
Шеннон Нельсон
1
CTRL-w v - правильная команда для разделения окон по вертикали
JRM
27
Вы можете сделать это, комбинируя tabкоманду с sb[uffer]командой.
Сначала вам нужно узнать идентификатор буфера, который вы хотите открыть в новой вкладке. Вы можете узнать это с помощью lsкоманды:
:ls
1 %a "foo" line 1
2 "bar" line 0
Получив идентификатор, вы можете легко открыть его на новой вкладке, используя:
:tab sb 2
Команда sbобычно открывает данный буфер в новом разделенном окне, но tabвместо этого команда открывает его в новой вкладке.
Команда tabтакже позволяет указать, где в списке вкладок должна быть создана новая вкладка. Например, :0tab sb 2новая вкладка «Панель» появится в начале списка, а не после текущей вкладки.
Вам не нужен номер буфера, дайте ему однозначную часть имени буфера, а VIM сделает все остальное за вас.
десерт
1
Это был ответ, который я искал и нуждался в этом. Я был встревожен, когда :tab buffer part-of-nameне открывал новую вкладку! Но :tab sb part-of-nameработал как шарм. Спасибо!!!!
Суким
Это не точный вопрос ОП, но это было именно то, что я искал :)
jackcogdill
25
Лучший способ выполнить то, о чем просил OP, это:
:bufdo tab split
Это откроет каждый буфер в отдельной вкладке, независимо от того, сколько их. Если вы используете это много, это легко сделать в вашем .vimrc. В сочетании с чем-то вроде этого маленького плагина vim, следующий элемент откроет каждый элемент из :grep(или : Ack ) на собственной вкладке:
:grep foo
:QuickFixOpenAll
:bufdo tab split
Конечно, при обращении к плагину было бы достаточно легко изменить его, чтобы открыть содержимое списка быстрых исправлений непосредственно во вкладках.
ОБНОВЛЕНИЕ : я действительно должен дать комментарий к комментарию ggustafsson ниже. Это , несомненно , лучший ответ на много и красиво иллюстрирует тенденцию Vim в стороне композиционного поведения. Предложение таково:
:tab sball
Стоит посмотреть справку Vim для : tab и : sball, чтобы увидеть, что здесь происходит.
Аналогичный подход из предыдущего редактирования для потомков :bufdo execute "tabnew %". Я думаю, что новый подход немного яснее.
Джон Уитли
Одно предостережение: если начальный буфер в vim не пуст, это, кажется, открывает последний буфер дважды. Я выложу обновление, если найду простое исправление.
Джон Уитли
12
:tab sballкажется, работает лучше.
ggustafsson
6
1. Откройте два файла в Vim.
$ vim foo bar
2. Проверьте количество буферов.
: Ls
1% "фу"
2 "бар"
3. Цепочка двух команд: tabnewоткрыть новую вкладку и b <buffer_number>загрузить нужный буфер во вкладку.
Проблема с шагом 3 состоит в том, что он сначала создает новую вкладку с пустым буфером, а затем открывает буфер 2, в результате чего в списке буферов появляется дополнительный безымянный буфер. Лучше использовать:tab sb 2
rkjnsn
1
@rkjnsn, вы должны опубликовать это как ответ - он лучше всего отвечает на вопрос 'как мне отредактировать существующий буфер в новой вкладке в vim?'
JonnyRaa
1
@JonnyLeeds сделано.
rkjnsn
4
Просто добавьте пункт, который другие парни не упомянули.
текущее окно на новую вкладку
Если есть несколько окон, <C-W>Tпереместите это окно на новую вкладку. Однако этот ярлык только для «Окна», а не для «буфера». Если вы предпочитаете этот стиль :spили <C-W>sдублируете текущий буфер на еще одно окно, то <C-W>Tпереместите его на новую вкладку.
4 нажатия клавиш или 7 нажатий клавиш.
текущий буфер для новой вкладки
:tabe % открыть новую вкладку для текущего буфера.
7 нажатий клавиш.
буфер для новой вкладки
Если использовать плагин CtrlP, также можно использовать «CtrlPBuffer», а затем с помощью <C-t>ярлыка, чтобы открыть его с новой вкладкой страницы. Этот стиль легко переключается на разные буферы.
С сочетанием клавиш CtrlPBuffer, 4 нажатия клавиш или более.
Нет, на :tabe %самом деле не открывается новая вкладка для текущего буфера. Что происходит, так это то, что он %раскрывается до :tabeпути к файлу текущего буфера и открывает этот путь. Vim увидит, что вы пытаетесь открыть файл, который у вас уже открыт, и повторно использует буфер, который у вас есть. Это означает, что это не работает с буферами, которые не имеют пути к файлу. Если вы открываете новый файл с помощью :newи не сохранили его, вы не сможете поместить его на новую вкладку с этим. Реальная команда, которая вам нужна, - это то, что rkjnsn вставил в ответ: :tab sb %или короче::tab sb
tabe %
что упомянуто в ответе liuyang1 ниже.:tabe %
он не работает с буферами, которые не имеют допустимого пути к файлу.:tab sb
работает каждый раз.Ответы:
Когда вы запускаете vim таким образом, вы не получаете клиента vim, текстовый редактор использует приглашение терминала или cmd - два файла находятся в двух разных буферах. Используйте
:ls
для перечисления буферов:% A является активным буфером. Вы можете использовать
:b2
для переключения в буфер 2 или использовать для перехода к:bn
следующему или:bp
для предыдущего. Я предпочитаю (CTRL-W v) разделять окна по вертикали, а не (CTRL-W s), которая разделяется по горизонтали.Если у вас загружено 2 файла и нет вкладок (пока), вы можете,
:tabnew
и в новой вкладке введите:b2
Если вы хотите, чтобы буферы всегда загружались в свои собственные вкладки, ознакомьтесь с этой статьей .
источник
vim
запустит редактор внутри оболочки. Чтобы получить графический интерфейс пользователя VIM, я должен использоватьgvim
. И вы правы - буферы являются глобальными для приложения vim.Вы хотите открыть буфер в новой вкладке?
Разделите экран (Ctrl-W s), откройте окно и нажмите Ctrl-W T
источник
Ctrl-w T
. Конечно, на первой вкладке все равно будет два буфера.:ls
.Вы можете сделать это, комбинируя
tab
команду сsb[uffer]
командой.Сначала вам нужно узнать идентификатор буфера, который вы хотите открыть в новой вкладке. Вы можете узнать это с помощью
ls
команды:Получив идентификатор, вы можете легко открыть его на новой вкладке, используя:
Команда
sb
обычно открывает данный буфер в новом разделенном окне, ноtab
вместо этого команда открывает его в новой вкладке.Команда
tab
также позволяет указать, где в списке вкладок должна быть создана новая вкладка. Например,:0tab sb 2
новая вкладка «Панель» появится в начале списка, а не после текущей вкладки.источник
:tab buffer part-of-name
не открывал новую вкладку! Но:tab sb part-of-name
работал как шарм. Спасибо!!!!Лучший способ выполнить то, о чем просил OP, это:
:bufdo tab split
Это откроет каждый буфер в отдельной вкладке, независимо от того, сколько их. Если вы используете это много, это легко сделать в вашем .vimrc. В сочетании с чем-то вроде этого маленького плагина vim, следующий элемент откроет каждый элемент из
:grep
(или : Ack ) на собственной вкладке:Конечно, при обращении к плагину было бы достаточно легко изменить его, чтобы открыть содержимое списка быстрых исправлений непосредственно во вкладках.
ОБНОВЛЕНИЕ : я действительно должен дать комментарий к комментарию ggustafsson ниже. Это , несомненно , лучший ответ на много и красиво иллюстрирует тенденцию Vim в стороне композиционного поведения. Предложение таково:
Стоит посмотреть справку Vim для : tab и : sball, чтобы увидеть, что здесь происходит.
источник
:bufdo execute "tabnew %"
. Я думаю, что новый подход немного яснее.:tab sball
кажется, работает лучше.1. Откройте два файла в Vim.
2. Проверьте количество буферов.
3. Цепочка двух команд:
tabnew
открыть новую вкладку иb <buffer_number>
загрузить нужный буфер во вкладку.источник
:tab sb 2
Просто добавьте пункт, который другие парни не упомянули.
Если есть несколько окон,
<C-W>T
переместите это окно на новую вкладку. Однако этот ярлык только для «Окна», а не для «буфера». Если вы предпочитаете этот стиль:sp
или<C-W>s
дублируете текущий буфер на еще одно окно, то<C-W>T
переместите его на новую вкладку.4 нажатия клавиш или 7 нажатий клавиш.
:tabe %
открыть новую вкладку для текущего буфера.7 нажатий клавиш.
Если использовать плагин CtrlP, также можно использовать «CtrlPBuffer», а затем с помощью
<C-t>
ярлыка, чтобы открыть его с новой вкладкой страницы. Этот стиль легко переключается на разные буферы.С сочетанием клавиш CtrlPBuffer, 4 нажатия клавиш или более.
источник
:tabe %
это то, что я давно искал, спасибо!:tabe %
самом деле не открывается новая вкладка для текущего буфера. Что происходит, так это то, что он%
раскрывается до:tabe
пути к файлу текущего буфера и открывает этот путь. Vim увидит, что вы пытаетесь открыть файл, который у вас уже открыт, и повторно использует буфер, который у вас есть. Это означает, что это не работает с буферами, которые не имеют пути к файлу. Если вы открываете новый файл с помощью:new
и не сохранили его, вы не сможете поместить его на новую вкладку с этим. Реальная команда, которая вам нужна, - это то, что rkjnsn вставил в ответ::tab sb %
или короче::tab sb