Integracja z edytorem¶
Emacs (Apheleia)¶
Apheleia uruchamia zewnętrzne formatery przy zapisie bufora, zachowując pozycję kursora.
(with-eval-after-load 'apheleia
(push '(snapper . ("snapper" "--format" "org")) apheleia-formatters)
(push '(org-mode . snapper) apheleia-mode-alist)
;; Add for other formats:
(push '(latex-mode . snapper) apheleia-mode-alist)
(push '(markdown-mode . snapper) apheleia-mode-alist))
Flaga --format automatycznie wykrywa format na podstawie rozszerzenia pliku, więc można ją pominąć, jeśli pliki mają standardowe rozszerzenia.
Vim / Neovim¶
Użyj formatprg, aby przekierować tekst przez snappera:
autocmd FileType org setlocal formatprg=snapper\ --format\ org
autocmd FileType tex setlocal formatprg=snapper\ --format\ latex
autocmd FileType markdown setlocal formatprg=snapper\ --format\ markdown
Następnie gq do przeformatowania zaznaczonego tekstu lub gggqG do przeformatowania całego bufora.
Dla Neovima z conform.nvim:
require("conform").setup({
formatters = {
snapper = {
command = "snapper",
args = { "--format", "$FILETYPE" },
stdin = true,
},
},
formatters_by_ft = {
org = { "snapper" },
tex = { "snapper" },
markdown = { "snapper" },
},
})
VS Code extension (recommended)¶
Install the snapper extension from the VS Code Marketplace (or from the repo at editors/vscode/).
It uses the LSP server for format-on-save, range formatting, and diagnostics.
Configure the path to the snapper binary in settings:
{
"snapper.path": "snapper",
"snapper.formatOnSave": true
}
Manual VS Code setup (without extension)¶
Użyj rozszerzenia „Run on Save” z własnym poleceniem:
{
"emeraldwalk.runonsave": {
"commands": [
{
"match": "\\.(org|tex|md|rst)$",
"cmd": "snapper --in-place ${file}"
}
]
}
}
LSP (any editor with LSP support)¶
Snapper ships a Language Server Protocol implementation. Start it with:
snapper lsp
This provides document formatting, range formatting, and diagnostics (flags lines with multiple sentences) over the standard LSP protocol on stdin/stdout.
Neovim (native LSP)¶
vim.api.nvim_create_autocmd("FileType", {
pattern = { "org", "tex", "markdown" },
callback = function()
vim.lsp.start({
name = "snapper",
cmd = { "snapper", "lsp" },
})
end,
})
Emacs (eglot)¶
(add-to-list 'eglot-server-programs
'((org-mode latex-mode markdown-mode) "snapper" "lsp"))
VS Code¶
Add to settings.json (requires a generic LSP client extension):
{
"lsp.servers": {
"snapper": {
"command": "snapper",
"args": ["lsp"],
"filetypes": ["org", "tex", "markdown"]
}
}
}
Helix¶
Add to ~/.config/helix/languages.toml:
[[language]]
name = "org"
language-servers = ["snapper"]
[language-server.snapper]
command = "snapper"
args = ["lsp"]
Ogólne (dowolny edytor)¶
Snapper domyślnie czyta ze stdin i pisze na stdout. Każdy edytor obsługujący przekierowanie przez zewnętrzny program będzie działał:
cat paper.org | snapper --format org