Emacs vs Vim: файловые менеджеры
Последние несколько лет много работал с редактором Vim, и он меня почти всем устраивал. Почти, это значит что были определенные проблемы, которые я смог решить только недавно.
Но каждый раз, как я читал блоги своих знакомых, обращал внимание на то, что многие используют Emacs. Ох, сколько раз я пытался его использовать, переписывал конфигурацию вдоль и поперек нескончаемое число раз. И тратил на это столько времени, что если бы писал программы, давно реализовал бы свою операционную систему.
Что интересно, в обоих редакторах столкнулся с одной и той проблемой, а именно: файловые менеджеры. В Vim, если открыть NetRW, он у меня оказывался в отдельных группах буферов, что затрудняло переключение между рабочими буферами. А в Emacs стандартный Dired просто бесил тем, что каждый переход в новую директорию создавал новый буфер. В результате после непродолжительной работы с Dired у меня оказывалось открытыми масса буферов, и приходилось тратить время только на то, чтобы закрыть их.
Много времени потратил на решение проблем в Emacs, не меньше времени потратил на разбирательство с Vim. В результате нашел решения. Итак, для начала Emacs.
Emacs
Первым нашел пакет под названием Dired+ . Красивый и функциональный файловый менеджер, расширяющий возможности стандартного Dired. Но критичным минусом является то, что он не представлен в репозиториях ELPA или MELPA. И устанавливать его нужно либо вручную, либо используя сторонние пакетные менеджеры, типа quelpa.
Пробовал задавать различные параметры самого Dired, но безрезультатно. В конце концов наткнулся на пакет dired-single , который предоставляет несколько новых функций, которые можно использовать в Dired. Остается только назначить их на стандартные сочетаний клавиш:
(use-package dired-single :ensure t
:config
(progn
(setq dired-single-use-magic-buffer t)
(defun my-dired-init ()
"Bunch of stuff to run for dired, either immediately or when it's loaded."
;; <add other stuff here>
(define-key dired-mode-map [return] 'dired-single-buffer)
(define-key dired-mode-map [mouse-1] 'dired-single-buffer-mouse)
(define-key dired-mode-map "^"
(function
(lambda nil (interactive) (dired-single-buffer "..")))))
(if (boundp 'dired-mode-map)
(my-dired-init)
(add-hook 'dired-load-hook 'my-dired-init))
(setq-default dired-omit-files-p t) ; Buffer-local variable
(setq dired-omit-files "^\\..*$")))
После чего получаем только один буфер Dired, который удобно использовать.
Vim
Стандартный NetRW вполне удобен и хорош. За исключением того, что буфер со списком файлов открывается в отдельном пространстве. В результате чего переход между буферами по :bn и :bp оказывается затруднительным. Плагин vim-vinegar
делает работу с файлами очень простой. Но из-за того, что после открытия буфера ты не можешь переключиться на другой буфер, сильно затрудняло работу. Долгое разбирательство показало, что достаточно было избавиться от опции set hidden в конфигурации и добавить следующую строку:
let g:netrw_altfile = 1
Для того, чтобы изменить поведение NetRW и сделать его буфер вполне обычным.
Что бы мне не говорили про мощь Emacs, и как бы его не нахваливали, уходить с Vim я уже не собираюсь. Так сказать ИМХО.