Как сделать открытие новых вкладок по умолчанию?

10

Когда я открываю vimс несколькими файлами ( vim f1 f2 ...), как я могу открыть их на вкладках напрямую, без использования -p?

Я пытаюсь отделить поведение оболочки от поведения vim, удалить vimпсевдонимы на основе и т. Д. Вот почему я предпочел бы не использовать псевдонимы и т. Д. (Следовательно, нет -p).

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

Для конкретной ссылки SO:

  • принятый ответ делает tabpagemax=9999. Назовите это личным уклоном, но я вижу, что лимит установлен на большое число, и я думаю, что что-то не так (то, что я чувствовал бы, если бы увидел chmod 777).

    :au VimEnter * set tabpagemax=9999|sil tab ball|set tabpagemax&vim
    
  • другой ответ приводит к открытию дополнительной пустой вкладки, но при этом гораздо более кратким.

    :autocmd VimEnter * argdo tabedit
    

Я надеюсь на ответ, в котором не открыта дополнительная вкладка и не установлен лимит для большого значения (или объясните, почему это не так уж плохо).

Мур
источник
@OrangeTux я отправил в духе ответа Жиля. Но с понижением я задаюсь вопросом, что бы сказал Жиль посту, ссылающемуся на существующий пост?
Муру
@Carpetsmoker Я не видел обновления вашего комментария. Пустая вкладка не является большой проблемой, когда ваши сеансы заканчиваются :qaпо привычке. Если это единственное преимущество, я бы пошел с другим, так как это кажется проще.
Муру
3
@muru WWGS? У вас есть основания полагать, что ответы на Stack Overflow не являются удовлетворительными? Если так, объясните это в своем вопросе. В любом случае, суммируйте ответы SO на ваш вопрос. Если это приводит к вопросу, содержащему его собственный ответ, не пишите.
Жиль "ТАК - перестань быть злым"
@ Жиль Обновлено. Я не опубликовал реальные команды, как вы думаете, я должен?
Муру

Ответы:

4

После некоторых экспериментов я обнаружил, что это лучший способ; он должен вести себя так же, как vim -p:

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

Сначала tab allоткрываются все записи в списке аргументов ( :args) на вкладке. Список аргументов - это список файлов, которые вы передали Vim при запуске. И tabfirstубедитесь, что первая вкладка ориентирована, а не последняя (это необязательно).

Мы не делаем ничего из этого, если &diffустановлено; если это так, мы используем vimdiffили vim -d, где мы хотим иметь 2 окна, а не 2 вкладки.

В этом ответе я также написал немного о списке аргументов и tab allкоторый может представлять интерес.


Некоторые заметки о других решениях:

  • tab ballоткрывает вкладку для каждой записи в списке буферов , а не в списке аргументов. Проблема заключается в том, что список буфера может быть сохранен в файле viminfo при выходе и восстановлен при запуске (если %он 'viminfo'включен, по умолчанию не включен). Так что, если вы просто напечатаете, vimон откроет эти файлы. Я считаю, что это нежелательно, хотя я могу представить, что некоторые люди находят это полезным; так что используйте то, что вы предпочитаете.

  • set tabpagemax=9999не требуется; по умолчанию 10, и это должно быть хорошо. Вы можете увеличить это в своем vimrc, если хотите больше, но 9999это глупое число. Если вы используете -p, вы также получаете tabpagemaxвкладки. Так что это должно уважать это. Помните, что это откроет (прочитает) буфер при запуске, так что это довольно медленно.

  • autocmd VimEnter * argdo tabeditэто точно такой же способ сказать tab all. Однако исходный буфер не очищается, поэтому у вас остается дополнительная вкладка ( tab allзаменяет все вкладки). Чтобы это исправить, вам нужен обходной путь в ответе Джоша Петри.

Мартин Турной
источник
2

Я думаю, что добавление чего-то подобного к вашему .vimrcможет решить ваши проблемы (заметьте, однако, что я на самом деле не использую это и выполнил только минимальное тестирование, в некоторых случаях это может делать странные вещи):

function! OpenArgumentsInTabs()
  ardo tabedit
  if tabpagenr("$") > 1
    tabclose
  endif
endfunction

autocmd VimEnter * call OpenArgumentsInTabs()

Как вы заметили, у вас argdo tabeditостанется пустая дополнительная вкладка. Таким образом, вы можете просто закрыть эту вкладку автоматически. Однако вы не можете просто вызвать tabcloseunchecked, иначе vim выдаст вам ошибку, когда вы запустите его без аргументов или одного файла («вы не можете закрыть последнюю вкладку»). Вместо этого проверьте, является ли общее количество вкладок больше одной (именно это и $вызывает tabpagenrвозврат), и только после этого вам нужно закрыть последнюю вкладку.


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

Сообщество
источник