Leí sobre cómo actualizar la línea de estado de vim aquí . Y puedo actualizarlo con éxito.
Pero, me gustaría conservar el formato de la línea de estado vim predeterminada y solo agregarle más información, por ejemplo, tamaño de archivo, tipo de archivo, etc.
La línea de estado predeterminada de Vim es:
<file-name> line_num,col_num %file
¿Cómo podría hacer lo siguiente?
- Me gustaría agregar información después del nombre del archivo
- Mostrar el formato actual de la línea de estado (
:set statusline
no muestra nada)
Lo intenté:
set statusline+=%y
Pero esto sobrescribe toda la línea de estado y solo muestra el tipo de archivo ( %y
).
¿Alguna pista?
Respuestas:
Como dijo @muru, no parece posible simular exactamente la línea de estado predeterminada cuando
statusline
se establece como el código para representarlo hace cosas que no se pueden especificar en lastatusline
configuración. Sin embargo, es posible acercarse bastante. Aquí hay una aproximación razonable de la apariencia de la línea de estado predeterminada cuandoruler
está habilitada:La principal diferencia es el posicionamiento de los números de línea y columna. Si es posible simular la lógica de espaciado predeterminada, no he podido encontrar una manera de hacerlo. Quizás esto sea lo suficientemente cerca para sus propósitos.
Utilizo una versión dividida de esto
.vimrc
para colocar la información de la línea de estado Syntastic en el medio de lo que parece una línea de estado vim normal con regla:fuente
El código no establece ningún valor en una cadena de estado vacía, sino que simplemente actúa usando algunos valores predeterminados. Ver
src/screen.c
, funciónwin_redr_status()
. Los elementos que se muestran se basan en características compiladas, por lo tanto, para reconstruir la línea de estado exacta, sería necesario mirar las características compiladas. Puede ser más sencillo usar la línea de estado de ejemplo que se proporciona en:h statusline
:fuente
%-14.(%l,%c%V%)
?tl; dr
Aunque mi solución sugerida no difiere mucho de la de las otras respuestas, me gustaría compartir una explicación más detallada.
comportamiento original
Primero, descubramos cómo
vim
dibuja la línea de estado. Las funciones responsables sonwin_redr_status()
ywin_redr_ruler()
.vim
toma el buffer nombre , añade un espacio si hay algún banderas a seguir (como[Help]
,[Preview]
,[+]
,[RO]
). A continuación, se añade las banderas .Normalmente asigna 18 celdas de caracteres para la regla. Si la parte del nombre del búfer no se ajusta al resto del espacio disponible, se
vim
trunca desde la izquierda y se agrega<
al principio.Si hay espacio para el mapa de teclas , lo agrega al final (alineado a la derecha).
Ahora, la regla. Se compone de
<row>,<col>-<virtcol>
parte y posición relativa (alineado a la derecha).También hay una restricción de que la parte con el nombre del búfer debe tener al menos la mitad del ancho .
solución
Ahora tomemos el valor sugerido por los documentos :
dónde
Entonces, primero
%<
se puede omitir, ya que por defecto el nombre del búfer se trunca al principio. Entonces, falta la bandera de vista previa (%w
). Además, cuando la ventana tiene menos de18 * 2
caracteres de ancho, la parte derecha ocupa más de la mitad de la línea de estado.Entonces, al menos podemos omitir
%<
y agregar%w
:Podemos ir más allá y asegurarnos de que la parte correcta no ocupe más de la mitad de la línea de estado:
Entonces podemos hacer que dependa de las características con las que
vim
se compiló .Pero diría que eso no es práctico, y la solución anterior sería suficiente para la mayoría de los intentos y propósitos. Sin embargo, si la última solución no funciona para usted, dígame qué sucede y trataré de encontrar una mejor.
El problema con la solución sugerida por Laurence Gonsalves es que si no hay banderas, hay dos espacios entre las partes izquierda y derecha:
fuente