¿Cómo hago que abrir pestañas nuevas sea el predeterminado?


10

Cuando abro vimcon varios archivos ( vim f1 f2 ...), ¿cómo puedo hacer que los abra en pestañas directamente, sin usar -p?

Estoy buscando separar el comportamiento de shell del comportamiento vim, eliminar los vimalias basados ​​en etc. Por eso preferiría no usar alias, etc. (por lo tanto, no -p).

Estoy bastante seguro de que este se ha preguntado en algunos sitios de SE (como en SO ). Sin embargo, no estoy en condiciones de juzgar cuál sería la mejor manera de hacer esto, así que también espero una nota sobre por qué un método sugerido es bueno.

Para la publicación SO particular vinculada:

  • la respuesta aceptada sí tabpagemax=9999. Llámalo sesgo personal, pero veo que se establece un límite en un gran número y creo que hay algo mal (como me sentiría si lo viera chmod 777).

    :au VimEnter * set tabpagemax=9999|sil tab ball|set tabpagemax&vim
    
  • la otra respuesta lleva a que se abra una pestaña vacía adicional, mientras que es mucho más conciso.

    :autocmd VimEnter * argdo tabedit
    

Espero una respuesta que no tenga una pestaña adicional abierta y no establezca un límite a un valor grande (o explique por qué eso no es algo malo).



@OrangeTux publiqué en el espíritu de la respuesta de Gilles. Pero con el voto negativo, me pregunto qué diría Gilles a una publicación que se vincula a una publicación existente.
muru

@Carpetsmoker No vi la actualización de tu comentario. Una pestaña vacía no es un gran problema cuando sus sesiones tienden a terminar :qapor la fuerza del hábito. Si esa es la única ventaja, iría con la otra, ya que parece más simple.
muru

3
@muru WWGS? ¿Tiene alguna razón para pensar que las respuestas en Stack Overflow no son satisfactorias? Si es así, explique eso en su pregunta. En cualquier caso, resuma las respuestas SO en su pregunta. Si eso lleva a la pregunta que contiene su propia respuesta, no publique.
Gilles 'SO- deja de ser malvado'

@Gilles actualizado. No publiqué los comandos reales, ¿crees que debería?
muru

Respuestas:


4

Después de experimentar un poco, he encontrado que esta es la mejor manera; debería comportarse igual que vim -p:

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

Primero, tab allabre todas las entradas en la lista de argumentos ( :args) en una pestaña. La lista de argumentos es una lista de archivos que le pasó a Vim en el inicio. Y tabfirstse asegura de que la primera pestaña esté enfocada en lugar de la última (esto es opcional).

No hacemos nada de esto si &diffestá configurado; si es así, estamos usando vimdiffo vim -d, donde queremos tener 2 ventanas, y no 2 pestañas.

En esta respuesta también he escrito un poco sobre la lista de argumentos y tab allcuáles pueden ser de interés.


Algunas notas sobre las otras soluciones:

  • tab ballabre una pestaña para cada entrada en la lista de búfer , no la lista de argumentos. El "problema" es que la lista de búfer puede guardarse en el archivo viminfo al salir y restaurarse al inicio (si %está dentro 'viminfo', no está habilitado de forma predeterminada). Entonces, si solo escribe vim, se abrirán esos archivos. Considero que esto no es deseado, aunque puedo imaginar que algunas personas lo encuentren útil; así que usa lo que prefieras.

  • set tabpagemax=9999no es requerido; el valor predeterminado es 10, y esto debería estar bien. Puede aumentar esto en su vimrc si quiere más, pero 9999es un número tonto. Si lo usa -p, también obtendrá tabpagemaxpestañas. Entonces esto debería respetar eso. Recuerde que esto abrirá (leerá) un búfer al inicio, por lo que es bastante lento.

  • autocmd VimEnter * argdo tabedites la misma forma de decir tab all. Sin embargo, el búfer inicial no se borra, por lo que te queda esa pestaña adicional ( tab allreemplaza todas las pestañas). Para solucionar esto, necesita la solución en la respuesta de Josh Petrie.


2

Creo que agregar algo como esto .vimrcpuede resolver sus problemas (tenga en cuenta, sin embargo, que en realidad no uso esto y solo he realizado pruebas mínimas, puede hacer cosas extrañas en algunos casos):

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

autocmd VimEnter * call OpenArgumentsInTabs()

Como notó, argdo tabeditle dejará una pestaña adicional vacía. Entonces, simplemente puede cerrar esa pestaña automáticamente. Sin embargo, no puede invocar simplemente tabclosesin marcar, o vim le dará un error cuando lo inicie sin argumentos o un solo archivo ("no puede cerrar la última pestaña"). En cambio, verifique si el número total de pestañas es mayor que uno (eso es lo que $hace tabpagenrque regrese) y solo entonces necesita cerrar la última pestaña.


Dicho esto, siento que vale la pena señalar que las pestañas de vim no son como las pestañas de otros editores , y eso es algo a tener en cuenta al considerar cómo usar las pestañas en su flujo de trabajo (parece que lo sabe, pero yo desea destacar el beneficio de futuros lectores que no lo hagan para que puedan tomar sus propias decisiones).

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.