Automatische Liste Fortsetzung und Formatierung für Neovim, angetrieben von Lua
Diese Frage kann auf zwei Arten interpretiert werden. Warum habe ich Autolist erstellt und warum Sie Autolist verwenden sollten?
Es klingt einfach, aber alles, was ich wollte, war ein Listen -Fortsetzungsplugin in Lua. Bullets.VIM funktioniert, ist aber in Vimscript geschrieben und ist mehr als tausend Zeilen lang. Unnötig zu erwähnen, dass ich keinen geeigneten finden konnte, also entschied ich mich, meine eigenen zu erstellen.
Die Dateien autolist.nvim's
sind relativ klein, wobei die Dateien mit Kommentaren und Formatierung komplett sind. Es ist bestrebt, so minimal wie möglich zu sein, während die grundlegende Funktionalität automatischer Listen implementiert wird, und implementiert den Kontext bewusst, dass die Listeneinträge genannt/markiert werden, um sich von der Formatierung abzulenken und es im Hintergrund zu funktionieren, während Sie Ihre Gedanken aufschreiben.
Dies verwendet Lazy.nvim, aber Sie können es auch an andere Paketmanager anpassen:
{
" 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 ,
},
-|+|*
oder 1.|2.|3.
)enter
/ return
und ein neuer Listeneintrag wird automatisch erstelltenter
/ return
in einem leeren Listeneintrag ihn zu einem neuen neuen Satz. - [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
}
Hier sind alle öffentlichen Funktionen:
AutolistNewBullet
: Fügt eine neue Kugel auf der aktuellen Linie hinzuAutolistRecalculate
: Rekulkuliert eine bestellte Liste neuAutolistToggleCheckbox
: Schaltet ein Kontrollkästchen in der aktuellen Zeile umAutolistCycleNext
: Fahrt die Listenentyp nach config.cycle
voranAutolistCyclePrev
: oben, aber rückwärtsAutolistTab
: Hat einen besonderen Anwendungsfall, in dem Sie die Liste beim Drücken von Registerkarte einführen möchten. Wenn Sie die Liste beim Drücken <ct>
einlegen möchten, müssen Sie nur <ct>
in AutolistRecalculate
da AutolistTab
im Grunde genommen eine Registerkarte in <ct>
mit neu berechnet wird.AutolistShiftTab
: Gleich wie oben, verwendet, um Textprozessoren zu replizieren. Mapping <s-tab>
in dies werden es in <cd>AutolistRecalculate
umwandeln. Alle oben beschriebenen Funktionen haben LUA -Gegenstücke, bei denen es sich nur um Schlangenfallversionen der Pascal -Fallbefehle handelt. Zum Beispiel hat AutolistNewBullet
das Schlangenfall -Gegenstück require("autolist").new_bullet()
Es gibt zwei spezielle Funktionen für LuA: require("autolist").cycle_next_dr
und require("autolist").cycle_prev_dr
, die dot-wiederholbare Versionen von AutolistCycleNext
und AutolistCyclePrev
liefern.
Kurz gesagt, Sie müssen lediglich ein Lua -Muster übereinstimmen, mit dem Autolist Ihren neuen Listenmarker finden kann.
Hier ist ein nicht-bater Artikel über Lua-Muster, aber Sie können Beispiele für diese Muster im Abschnitt vorbelastete Muster finden.
Hier erfahren Sie, wie Sie Ihre benutzerdefinierte Liste definieren:
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
},
},
}
})
Jetzt wird Ihr LuA -Muster (in diesem Fall %a[.)]
Das ASCII -Listen entspricht) auf Markdown -Dateien angewendet.
Hat es eine Zuordnung, um ein Kontrollkästchen wie Kugeln umzuschalten? Ja.
Unterstützt es Kontrollkästchen -Listen? Ja.
Fand, dass ein Plugin bricht, wenn Sie Autolist verwenden? Siehe #43. Grundsätzlich müssen Sie sicherstellen, dass Autolist nach allen anderen Plugins lädt. Wenn das nicht funktioniert, können Sie gerne ein neues Problem erstellen. Stellen Sie außerdem sicher, dass die Kapitalisierung Ihrer Zuordnungen korrekt ist, oder Autolist erkennt die anderen Plugins nicht ( <cr>
sollte <CR>
).
inspiriert von diesem Kern
"Alle Software fügt Funktionen hinzu, bis sie ärgerlich kompliziert ist. Sie wird dann durch eine" einfachere "Lösung ersetzt, die Funktionen hinzufügt, bis sie genau so kompliziert sind."
Auf der Suche nach Mitwirkenden, weil ich Schularbeiten habe, was bedeutet, dass ich manchmal nicht mit Problemen Schritt halten kann