Hacker News new | past | comments | ask | show | jobs | submit login
Paredit.vim – Paredit Mode: Structured Editing of Lisp S-Expressions (github.com/kovisoft)
38 points by susam on July 30, 2022 | hide | past | favorite | 9 comments



I wish source code editors were much more AST-oriented rather than row-column-oriented. Sure, it’s more difficult when your grammar is more complex than s-expressions, but most editors these days maintain an AST of the source in real time anyway.

Features such as selection that grows "inside out" (or bottom-up) rather than line by line, moving a selection around to the next/previous valid position, moving various delimiters around to next/previous valid position, enclosing whatever’s under the cursor in a new block/pair of parens, and so on.

Unless we’re talking about FORTRAN or COBOL circa 1960, source code is a tree natively and text only incidentally.


Have a look at Neovim with its Tree-Sitter parser, it enables such 'growing selections' natively. It's also relatively easy to write plugins based on the parsed AST. I wrote treesitter-unit[1] making it easy to select/modify the subtree of the selection.

[1]: https://github.com/David-Kunz/treesitter-unit


I think you'll find treesitter quite interesting: https://github.com/nvim-treesitter/nvim-treesitter#increment...


The Emacs paredit.el that they cite is by Taylor Campbell. https://www.emacswiki.org/emacs/ParEdit http://mumble.net/~campbell/emacs/paredit.el


I wish I could tip him


The major alternative to this is Parinfer (https://shaunlebron.github.io/parinfer/). It works very well, especially for Vim where paredit-style bindings aren't that natural IMO. Parinfer has less to remember. There are some very solid implementations like https://github.com/eraserhd/parinfer-rust and its Vim plugin.


I have been learning Racket on and off for the last few years as part of an interest in DSLs. (The documentation is well written, but I confess a certain kind of impatience with it because it is hard for me to get task-specific information when I'm trying to solve a particular problem.)

I recently had to remove parinfer because its inferences in multi-line syntax-parse statements were not great: I had to join a bunch of lines together to put in the parentheses I needed and lost placement. Parinfer's unwillingness to let me balance parentheses manually is a frustration. Am I misusing it?


Interestingly, there is a popular vim-style sexp editing mode for Emacs: https://github.com/abo-abo/lispy


Noctuid, of `general.el` fame, has a related package which integrates lispy's approach with `evil.el` better.

https://github.com/noctuid/lispyville




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: