listas con viñetas para documentos de texto sin formato en Vim

8

Si bien Vim admite la sangría automática en las listas, la configuración predeterminada solo cubre las listas ordenadas, comenzando con dígitos, como:

1. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
   tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim
2. veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea
   commodo consequat.

No he podido averiguar cómo extender esto a listas con viñetas desordenadas, como:

* Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
  tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim
* veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea
  commodo consequat.

Cambiar el formatlistpatRegEx no condujo a los resultados deseados (de hecho, incluso rompió las listas ordenadas).

Congreso Nacional Africano
fuente

Respuestas:

10

Saber a lo que trataste de establecer el valor ayudaría, pero supongo que no escapaste correctamente las barras diagonales inversas.

El valor predeterminado es

formatlistpat=^\s*\d\+[\]:.)}\t ]\s*

pero para establecer ese valor (en su vimrc o en la línea de cmd) debe usar

set formatlistpat=^\\s*\\d\\+[\\]:.)}\\t\ ]\\s*

Esto se explica en :help option-backslash. Una modificación simple para permitir formatlistpattrabajar con *listas desordenadas y delimitadas sería

set formatlistpat=^\\s*[0-9*]\\+[\\]:.)}\\t\ ]\\s*
jamessan
fuente
De hecho, eso funciona, ¡muchas gracias! Pensé que había escapado correctamente de todo (incluso redujo la complejidad del patrón), pero aparentemente me equivoqué. Podría haber escapado de los asteriscos, lo que explicaría mis problemas ...
AnC
2
Como se explica en la ayuda [], es más rápido de usar [[:digits:]*]o [\d*]más bien[0-9*]
Aditya
Se podría eludir el tema citando utilizando leten lugar de set, por ejemplo: let &formatlistpat='^\s*\(\d\+[\]:.)}\t ]\|[*-][\t ]\)\s*'. (Esto agrega soporte para *y -como viñetas, además de números.)
wjv
@wjv He probado tu solución y funciona para listas, pero no con asteriscos. ¿Alguna idea de lo que podría causar esto?
languitar
@wjv parece el * dentro de la commentsvariable, a pesar de ser la parte central de un comentario de tres partes, dejemos que vim confunda el asterisco con un comentario de línea.
languitar
3

Además de lo que escribió jamessan (en particular, su formatlistpatsugerencia para trabajar con listas *), es importante tener la opción 'c' (formato de comentario) desactivada en formatoptions:

set formatoptions-=c

de lo contrario, Vim se confunde entre el formato de * listas con viñetas y el formato de los comentarios. Terminas con un * extra en la segunda y siguientes líneas.

Blixtor
fuente
No solo eso, sino que el indicador q(permitir formato de comentarios con gq) formatoptionspuede causar problemas al formatear con gq. +1
Kazark
1

Tuve algunos problemas para obtener listas como a)reconocidas, así que publicaré mi solución aquí:

" Recognise lists like 1), 1., a), a., and so on
" Note that | need to be escaped AND preceeded by a literal backslash
set formatlistpat=^\\s*\\([0-9]\\+\\\|[a-z]\\)[\\].:)}]\\s\\+
RobM
fuente
1

Estoy escribiendo una nueva respuesta a esta pregunta porque tuve que combinar varias respuestas de esta pregunta y esta otra pregunta para que esto funcione. Aquí está mi configuración final.

set formatlistpat=^\\s*[0-9*]\\+[\\]:.)}\\t\ ]\\s*
set formatoptions-=c
set comments-=mb:*
merlin2011
fuente