In Vim, you can easily call an external text utility on a region of text, then replace that selected region with the output of the text utility. This is very useful for doing bulk transformations quickly.
I coded up a very stupid commenting program called
nox
that comments/uncomments text.
Here is how you’d use it straight from the terminal:
By default nox comments text, and the -l c
option sets it to C-styled
comments, //
.
Emacs
I use evil-mode with Emacs.
Here is my relevant .emacs
to set up nox
correctly:
(defun my-addrem-comment-region (b e f)
"Use the `nox' command to comment the current region."
(interactive)
(shell-command-on-region
; beginning and end of buffer
b e
; command and parameters
(concat
(if f
"~/prog/nox/src/nox -l "
"~/prog/nox/src/nox -u -l ")
(case (with-current-buffer (current-buffer) major-mode)
('c-mode "c")
('emacs-lisp-mode "emacslisp")
('haskell-mode "haskell")
('LilyPond-mode "tex")
('plain-tex-mode "tex")
(t "shell")); default to shell
)
; output buffer
(current-buffer)
; replace?
t
; name of the error buffer
"*nox Error Buffer*"
; show error buffer?
t
)
)
(defun my-addrem-comment (f)
(if (use-region-p)
(progn
(my-addrem-comment-region (region-beginning) (region-end) f)
(evil-visual-char)
(evil-exit-visual-state)
)
(my-addrem-comment-region
(line-beginning-position) (line-beginning-position 2) f)
)
)
(define-key evil-visual-state-map ",c"
(lambda () (interactive) (my-addrem-comment t))) ; add comment
(define-key evil-visual-state-map ",C" (lambda () (interactive)
(my-addrem-comment nil))) ; remove comment
(define-key evil-normal-state-map ",c"
(lambda () (interactive) (my-addrem-comment t))) ; add comment
(define-key evil-normal-state-map ",C"
(lambda () (interactive) (my-addrem-comment nil))) ; remove comment
emacs-unix-filter.el
[GitHub]
[Download]
This is certainly not the most beautiful code, but it works.