listas com marcadores para documentos de texto sem formatação no Vim

8

Enquanto o Vim suporta recuo automático em listas, a configuração padrão abrange apenas listas ordenadas, começando com 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.

Não consegui descobrir como estender isso para listas desordenadas e com marcadores, 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.

Alterar o formatlistpatRegEx não levou aos resultados desejados (na verdade, ele até quebrou as listas ordenadas).

AnC
fonte

Respostas:

10

Saber o que você tentou definir o valor ajudaria, mas acho que você não escapou adequadamente das barras invertidas.

o valor padrão é

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

mas para realmente definir esse valor (no seu vimrc ou no cmdline) você deve usar

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

Isso é explicado em :help option-backslash. Uma modificação simples para permitir formatlistpattrabalhar com *listas delimitadas e não ordenadas seria

set formatlistpat=^\\s*[0-9*]\\+[\\]:.)}\\t\ ]\\s*
jamessan
fonte
Na verdade, isso funciona - muito obrigado! Eu pensei que tinha escapado de tudo corretamente (até reduziu a complexidade do padrão), mas aparentemente estava errado. Eu poderia ter escapado dos asteriscos, o que explicaria meus problemas ...
AnC
2
Conforme explicado na ajuda [], é mais rápido usar [[:digits:]*]ou [\d*]melhor do que #[0-9*]
Aditya
Pode-se evitar a questão citando usando let, em vez de set, por exemplo: let &formatlistpat='^\s*\(\d\+[\]:.)}\t ]\|[*-][\t ]\)\s*'. (Isso adiciona suporte para *e -como balas, além de números.)
wjv
@wjv Tentei sua solução e ela funciona para - listas, mas não com asteriscos. Alguma ideia sobre o que poderia causar isso?
languitar
@wjv parece o * dentro da commentsvariável, apesar de ser a parte do meio de um comentário de três partes, vamos vim confundir o asterisco com um comentário de linha.
languitar
3

Além do que jamessan escreveu (em particular sua formatlistpatsugestão para trabalhar com * listas), é importante ter a opção 'c' (formatação de comentários) desabilitada em formatoptions:

set formatoptions-=c

caso contrário, o Vim fica confuso entre a formatação de * listas com marcadores e a formatação de comentários. Você acaba com um * extra na segunda e na seguinte linhas.

Blixtor
fonte
Não apenas isso, mas o sinalizador q(permitir formatação de comentários com gq) formatoptionspode causar problemas ao formatar com gq. +1
Kazark 13/03
1

Como tive problemas para obter listas como a)reconhecidas, postarei minha solução aqui:

" 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
fonte
1

Estou escrevendo uma nova resposta para esta pergunta porque tive que combinar várias respostas desta e de outra pergunta para fazer esse trabalho. Aqui está minha configuração final.

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