Як зробити відкриття нових вкладок за замовчуванням?


10

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

Я прагну відокремити поведінку оболонки від поведінки VIM, видалити vimпсевдоніми на основі тощо. Тому я вважаю за краще не використовувати псевдоніми тощо (отже, ні -p).

Я впевнений, що про це запитували на кількох сайтах SE (наприклад, на 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? Чи є у вас підстави вважати, що відповіді на переповнення стека не є задовільними? Якщо так, поясніть це у своєму запитанні. У будь-якому випадку, підсумуйте відповіді на відповідь у вашому запитанні. Якщо це призводить до питання, що містить власну відповідь, не публікуйте.
Жил "ТАК - перестань бути злим"

@Gilles Оновлено. Я не публікував фактичних команд, ви думаєте, я повинен?
муру

Відповіді:


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ви залишите порожню додаткову вкладку. Таким чином, ви можете просто закрити цю вкладку автоматично. Однак ви не можете просто викликати tabcloseнеперевірений елемент, або vim надасть вам помилку під час запуску без аргументів або одного файлу (ви не можете закрити останню вкладку). Натомість перевірте, чи загальна кількість вкладок більше одиниці (саме це $викликає tabpagenrповернення), і лише тоді вам потрібно закрити останню вкладку.


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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.