Como faço para abrir novas guias o padrão?

10

Quando abro vimcom vários arquivos ( vim f1 f2 ...), como posso abri-los diretamente nas guias, sem usar -p?

Eu estou procurando separar o comportamento do shell do comportamento do vim, removendo os vimaliases com base, etc. É por isso que eu prefiro não usar aliases, etc. (portanto, não -p).

Tenho certeza de que este foi solicitado em alguns sites SE (como no SO ). No entanto, não estou em posição de julgar qual seria a melhor maneira de fazer isso, então também espero uma observação sobre por que um método sugerido é bom.

Para a publicação específica do SO vinculada:

  • a resposta aceita sim tabpagemax=9999. Chame isso de viés pessoal, mas vejo um limite sendo definido para um número grande e acho que há algo errado (do jeito que eu me sentiria se visse chmod 777).

    :au VimEnter * set tabpagemax=9999|sil tab ball|set tabpagemax&vim
    
  • a outra resposta leva à abertura de uma guia extra vazia, sendo muito mais concisa.

    :autocmd VimEnter * argdo tabedit
    

Espero uma resposta que não tenha uma guia extra aberta e não defina um limite para um valor grande (ou explique por que isso não é uma coisa ruim).

muru
fonte
Eu publiquei no espírito da resposta de Gilles. Mas com o voto negativo, pergunto-me o que Gilles diria a um post vinculado a um post existente?
muru
@Carpetsmoker Não vi sua atualização de comentários. Uma tabulação vazia não é um grande problema quando suas sessões tendem a terminar :qapor força do hábito. Se essa é a única vantagem, eu iria com a outra, já que parece mais simples.
muru
3
@muru WWGS? Você tem um motivo para pensar que as respostas no Stack Overflow não são satisfatórias? Se sim, explique isso na sua pergunta. De qualquer forma, resuma as respostas SO na sua pergunta. Se isso leva à pergunta que contém sua própria resposta, não poste.
Gilles 'SO- stop be evil'
@Gilles Updated. Eu não publiquei os comandos reais, você acha que eu deveria?
muru

Respostas:

4

Após algumas experiências, descobri que esse é o melhor caminho; deve se comportar da mesma maneira que vim -p:

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

Primeiro, tab allabre todas as entradas na lista de argumentos ( :args) em uma guia. A lista de argumentos é uma lista de arquivos que você passou para o Vim na inicialização. E isso tabfirstgarante que a primeira guia esteja focada e não a última (isso é opcional).

Nós não fazemos nada disso se &diffestiver definido; se estiver, estamos usando vimdiffou vim -d, onde queremos ter duas janelas e não duas guias.

Em esta resposta Eu também tenho escrito um pouco sobre a lista de argumentos e tab allque podem ser de interesse.


Algumas notas sobre as outras soluções:

  • tab ballabre uma guia para cada entrada na lista de buffers , não na lista de argumentos. O "problema" é que a lista de buffers pode ser salva no arquivo viminfo ao sair e restaurada na inicialização (se %estiver dentro 'viminfo', não ativado por padrão). Então, se você digitar vim, abrirá esses arquivos. Considero isso indesejável, embora possa imaginar algumas pessoas achando útil; então use o que você preferir.

  • set tabpagemax=9999não é necessário; o padrão é 10e isso deve estar bem. Você pode aumentar isso no seu vimrc se quiser mais, mas 9999é um número tolo. Se você usar -p, também terá tabpagemaxguias. Então isso deve respeitar isso. Lembre-se de que isso abrirá (lerá) um buffer na inicialização, por isso é bastante lento.

  • autocmd VimEnter * argdo tabedité exatamente a mesma maneira de dizer tab all. No entanto, o buffer inicial não é limpo, então você fica com essa guia extra ( tab allsubstitui todas as guias). Para corrigir isso, você precisa da solução alternativa na resposta de Josh Petrie.

Martin Tournoij
fonte
2

Eu acho que adicionar algo assim ao seu .vimrcpode resolver seus problemas (observe, no entanto, que eu realmente não uso isso e fiz apenas testes mínimos, pode fazer coisas estranhas em alguns casos):

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

autocmd VimEnter * call OpenArgumentsInTabs()

Como você observou, você argdo tabeditterá uma guia extra vazia. Então você pode simplesmente fechar essa guia automaticamente. No entanto, você não pode simplesmente chamar tabclosedesmarcado, ou o vim apresentará um erro quando você o iniciar sem argumentos ou um único arquivo (você "não pode fechar a última guia"). Em vez disso, verifique se o número total de guias é maior que um (é o que $causa o tabpagenrretorno) e só então você precisa fechar a última guia.


Dito isso, acho que vale a pena ressaltar que as guias do vim não são como as guias de outros editores , e isso é algo a ter em mente ao considerar como usar as guias no seu fluxo de trabalho (você parece estar ciente disso, mas eu deseja mostrar o argumento em benefício de futuros leitores que talvez não o façam para que possam tomar suas próprias decisões).

Comunidade
fonte