Continuação e formatação automática de lista
Esta questão pode ser interpretada de duas maneiras. Por que eu criei o Autolist e por que você deve usar o Autolist.
Parece simples, mas tudo o que eu queria era um plug -in de continuação da lista em Lua. Bullets.Vim funciona, mas está escrito em vimscript e tem mais de mil linhas de comprimento. Escusado será dizer que não consegui encontrar um adequado, então decidi criar o meu.
Os arquivos autolist.nvim's
são relativamente pequenos, com os arquivos completos com comentários e formatação. Ele se esforça para ser o mais mínimo possível, ao implementar a funcionalidade básica de listas automáticas, e implementa a renumeração/marcação do contexto de entradas de lista, para tirar sua mente da formatação e fazê -lo trabalhar em segundo plano enquanto você escreve seus pensamentos.
Isso está usando preguiçoso.nvim, mas você pode adaptá -lo a outros gerentes de pacotes também:
{
" gaoDean/autolist.nvim " ,
ft = {
" markdown " ,
" text " ,
" tex " ,
" plaintex " ,
" norg " ,
},
config = function ()
require ( " autolist " ). setup ()
vim . keymap . set ( " i " , " <tab> " , " <cmd>AutolistTab<cr> " )
vim . keymap . set ( " i " , " <s-tab> " , " <cmd>AutolistShiftTab<cr> " )
-- vim.keymap.set("i", "<c-t>", "<c-t><cmd>AutolistRecalculate<cr>") -- an example of using <c-t> to indent
vim . keymap . set ( " i " , " <CR> " , " <CR><cmd>AutolistNewBullet<cr> " )
vim . keymap . set ( " n " , " o " , " o<cmd>AutolistNewBullet<cr> " )
vim . keymap . set ( " n " , " O " , " O<cmd>AutolistNewBulletBefore<cr> " )
vim . keymap . set ( " n " , " <CR> " , " <cmd>AutolistToggleCheckbox<cr><CR> " )
vim . keymap . set ( " n " , " <C-r> " , " <cmd>AutolistRecalculate<cr> " )
-- cycle list types with dot-repeat
vim . keymap . set ( " n " , " <leader>cn " , require ( " autolist " ). cycle_next_dr , { expr = true })
vim . keymap . set ( " n " , " <leader>cp " , require ( " autolist " ). cycle_prev_dr , { expr = true })
-- if you don't want dot-repeat
-- vim.keymap.set("n", "<leader>cn", "<cmd>AutolistCycleNext<cr>")
-- vim.keymap.set("n", "<leader>cp", "<cmd>AutolistCycleNext<cr>")
-- functions to recalculate list on edit
vim . keymap . set ( " n " , " >> " , " >><cmd>AutolistRecalculate<cr> " )
vim . keymap . set ( " n " , " << " , " <<<cmd>AutolistRecalculate<cr> " )
vim . keymap . set ( " n " , " dd " , " dd<cmd>AutolistRecalculate<cr> " )
vim . keymap . set ( " v " , " d " , " d<cmd>AutolistRecalculate<cr> " )
end ,
},
-|+|*
ou 1.|2.|3.
)enter
/ return
e uma nova entrada da lista será criada automaticamenteenter
/ return
em uma entrada de lista vazia será excluída, deixando você com uma nova frase. - [x] checkboxes can be toggled with ` :AutolistToggleCheckbox ` , which is bound to ` return ` in normal mode if you used the default mappings
1 . [x] these can also be numbered
a) [ ] or these can work too
b) [ x ] see?
I. Roman numerals are also supported
II. Just press enter, and autolist will do the calculations for you
MX. All the way up
MXI. to infinity
MXII. It really will continue forever
MXIII. -I think
- you can cycle the type of the list with ` :AutolistCycleNext ` and ` :AutolistCyclePrev `
- below is a copy of this list after cycling twice
1 . you can cycle the type of the list with ` :AutolistCycleNext ` and ` :AutolistCyclePrev `
2 . below is a copy of this list after cycling twice
local list_patterns = {
neorg_1 = " %- " ,
neorg_2 = " %-%- " ,
neorg_3 = " %-%-%- " ,
neorg_4 = " %-%-%-%- " ,
neorg_5 = " %-%-%-%-%- " ,
unordered = " [-+*] " , -- - + *
digit = " %d+[.)] " , -- 1. 2. 3.
ascii = " %a[.)] " , -- a) b) c)
roman = " %u*[.)] " , -- I. II. III.
latex_item = " \ item " ,
}
local default_config = {
enabled = true ,
colon = { -- if a line ends in a colon
indent = true , -- if in list and line ends in `:` then create list
indent_raw = true , -- above, but doesn't need to be in a list to work
preferred = " - " , -- what the new list starts with (can be `1.` etc)
},
cycle = { -- Cycles the list type in order
" - " , -- whatever you put here will match the first item in your list
" * " , -- for example if your list started with a `-` it would go to `*`
" 1. " , -- this says that if your list starts with a `*` it would go to `1.`
" 1) " , -- this all leverages the power of recalculate.
" a) " , -- i spent many hours on that function
" I. " , -- try it, change the first bullet in a list to `a)`, and press recalculate
},
lists = { -- configures list behaviours
-- Each key in lists represents a filetype.
-- The value is a table of all the list patterns that the filetype implements.
-- See how to define your custom list below in the readme.
-- You must put the file name for the filetype, not the file extension
-- To get the "file name", it is just =:set filetype?= or =:se ft?=.
markdown = {
list_patterns . unordered ,
list_patterns . digit ,
list_patterns . ascii , -- for example this specifies activate the ascii list
list_patterns . roman , -- type for markdown files.
},
text = {
list_patterns . unordered ,
list_patterns . digit ,
list_patterns . ascii ,
list_patterns . roman ,
},
norg = {
list_patterns . neorg_1 ,
list_patterns . neorg_2 ,
list_patterns . neorg_3 ,
list_patterns . neorg_4 ,
list_patterns . neorg_5 ,
},
tex = { list_patterns . latex_item },
plaintex = { list_patterns . latex_item },
},
checkbox = {
left = " %[ " , -- the left checkbox delimiter (you could change to "%(" for brackets)
right = " %] " , -- the right checkbox delim (same customisation as above)
fill = " x " , -- if you do the above two customisations, your checkbox could be (x) instead of [x]
},
-- this is all based on lua patterns, see "Defining custom lists" for a nice article to learn them
}
Aqui estão todas as funções públicas:
AutolistNewBullet
: adiciona uma nova bala na linha atualAutolistRecalculate
: Recalcula uma lista ordenadaAutolistToggleCheckbox
: Alterna uma caixa de seleção na linha atualAutolistCycleNext
: Ciclos o tipo de lista encaminhe de acordo com config.cycle
AutolistCyclePrev
: acima, mas para trásAutolistTab
: possui um caso de uso especial, onde você deseja recuar a lista ao pressionar a guia. Se você deseja encerrar a lista ao pressionar <ct>
, você só precisa mapear <ct>
para AutolistRecalculate
porque AutolistTab
basicamente transforma uma guia em <ct>
com recalculado.AutolistShiftTab
: A mesma coisa acima, usada para replicar processadores de texto. O mapeamento <s-tab>
para isso o converterá em <cd>AutolistRecalculate
. Todas as funções descritas acima têm colegas da Lua, que são apenas versões de casos de cobra dos comandos de casos Pascal. require("autolist").new_bullet()
AutolistNewBullet
Existem duas funções especiais para o Lua: require("autolist").cycle_next_dr
e require("autolist").cycle_prev_dr
, que fornecem versões repetíveis com pontos de AutolistCycleNext
e AutolistCyclePrev
.
Em poucas palavras, tudo o que você precisa fazer é fazer uma correspondência de padrão Lua que permite que o Autolist encontre seu novo marcador de listagem.
Aqui está um artigo não bad-bad sobre padrões da Lua, mas você pode encontrar exemplos para esses padrões na seção Padrões pré-carregados.
Veja como definir sua lista personalizada:
local my_list_patterns = {
test = " %a[.)] "
}
require ( ' autolist ' ). setup ({
lists = {
markdown = {
" %a[.)] " , -- insert your custom lua pattern here
my_list_patterns . test , -- or use a variable
},
},
}
})
Agora, seu padrão Lua (neste caso %a[.)]
Que corresponde às listas ASCII) será aplicado aos arquivos de marcação.
Ele tem um mapeamento para alternar uma caixa de seleção como balas.vim tem? Sim.
Suporta listas de caixa de seleção? Sim.
Descobriu que um plug -in quebra quando você usa o Autolist? Veja #43. Basicamente, você precisa garantir que a cargas de autolistas depois de todos os outros plugins. Se isso não funcionar, sinta -se à vontade para criar um novo problema. Além disso, verifique se a capitalização dos seus mapeamentos está correta, ou o Autolist não detectará os outros plugins ( <cr>
deve ser <CR>
).
inspirado por esta essência
"Todo o software adiciona recursos até que seja irritantemente complicado. Ele é substituído por uma solução" mais simples "que adiciona recursos até que seja exatamente tão complicada".
Procurando contribuidores porque tenho trabalhos escolares, o que significa que às vezes não consigo acompanhar os problemas