Переход с Vim на Emacs - Как эффективно редактировать код - PullRequest
2 голосов
/ 22 марта 2019

В настоящее время я пытаюсь перейти с vim на emacs и испытываю некоторые трудности при редактировании кода. Для большинства очень простых нажатий клавиш vim я нашел версию emacs, например, простое движение

  1. h, j, k, l являются C-b, C-n, C-p, C-f
  2. w, b являются M-f, M-b
  3. I, A являются C-a, C-e
  4. ...

но для некоторых "более продвинутых" функций, к которым я привык, я не уверен, что такое emacs.

Вот некоторые проблемы, которые возникают в моем текущем рабочем процессе, когда я использую emacs.
Пожалуйста, покажите мне, как emacs люди делают это (очевидно, без использования эмуляции vim ) или каков альтернативный рабочий процесс, дружественный к emacs.

Прыжки с f

Когда я пишу что-то в vim и замечаю, мне нужно что-то изменить в этой строке, я могу использовать f, чтобы просто перейти к нему

int foo = caallFoo();
                     ^

В этом случае я бы Fad удалил это «а». В emacs я в настоящее время M-b и C-f, пока не найду символ, который хочу отредактировать. Я пытаюсь использовать Ace Jump (это хороший плагин), но для прыжков по линии, в которой я сейчас нахожусь, все еще плохо.

Так как же emacs быстро перемещается по линии, не сходя с ума?

Навигация по окнам

Мой рабочий процесс часто включает в себя несколько окон, открытых в vim (скажем, файловый браузер, 4 окна кода и панель тегов), и навигация работает с C-w h, C-w j, C-w k и C-w l. Когда я нажимаю C-w s или C-w v новое окно, оно открывается и ретранслирует все окна.

До сих пор я видел C-x 2 и C-x 3 в emacs, чтобы открывать новые окна, но их размер каждый раз становится меньше, так как вновь созданное окно и окно с фокусом теперь разделяют пространство, используемое фокусированным окном иметь. Для навигации я нашел только C-x o, который просто перебирает окна и не позволяет мне выбрать конкретное окно для перехода.

Я видел, что некоторые люди используют плагины, чтобы получить более вменяемый многооконный рабочий процесс.
В emacs уже есть какая-то хорошая оконная навигация, или я должен найти плагин, который сделает эту работу за меня? Или мой рабочий процесс с 4-6 окнами - это то, что я не должен делать в emacs.

Копирование, вставка, перемещение линий и т. Д.

В файлах кода мне нравится создавать комментарии для визуальной маркировки определенных разделов.

////////////////////////////////////////////////////////////////////////////////
// SECTION
////////////////////////////////////////////////////////////////////////////////

В vim я создаю что-то вроде 80a/<ESC>yyppklC (80 раз добавьте '/', скопируйте эту строку и вставьте ее два раза, во второй строке измените все после второй '/') и введите имя.

Создание первой строки так же просто в emacs C-u 80/ (80 раз напишите '/'), но вставка при копировании будет выглядеть примерно так: C-a C-SPC C-e M-w <ENTER> C-y <ENTER> C-y (переходите к началу, если строка устанавливает метку, перейти в конец строки, скопировать все, два раза сделать новую строку и вставить). А затем написать имя раздела C-a C-p C-f C-f C-k (перейти к предыдущей строке, перейти к началу, перейти на две буквы вправо, удалить до конца)

Мой вариант Emacs использует много нажатий клавиш и концептуально более сложен. Если бы я мог повторить последнее действие, как в Vim, у меня не было бы проблемы с копированием (в vim 80a/<ESC>j.j.), но в emacs повторение последней команды привело бы к переходу на следующую строку вместо "80 раз вставить '/' «)

  • Как мне лучше скопировать / вырезать / вставить целые строки? Или какая альтернатива?
  • Как мне повторить последнее действие, которое не является движением?

Перемещение курсора

Что-то из более простого движения, которое мне нравится делать при просмотре кода, это перемещение курсора с помощью C-d и C-u. В emacs я знаю только C-v и M-v, которые перемещают экран вверх и вниз и помещают курсор в начало. Как мне переместить курсор на половину экрана? Или, альтернативно, как поместить курсор в середину / верх / низ экрана, как H, M, L do в vim?

Ответы [ 2 ]

2 голосов
/ 22 марта 2019

Прыжки с f

Я бы сделал C-r a RET DEL Это не так хорошо, vim. Vim действительно сияет в этой области.

Навигация по Windows

Мой рабочий процесс состоит в том, чтобы иметь два окна, в результате чего C-x o всегда делает то, что я хочу.

Я делаю гораздо больше переключений в буфере и не слишком много навигации по окну. Я не пытаюсь получить буферы в определенных окнах.

Я многозадачен при переключении задач, не смотря на несколько окон одновременно, вы можете отличаться. Я использую шлем и использую невизуальный подход с символической меткой. Это выглядит так, у меня такое ощущение, что мне нужно что-то еще, я думаю, что слова, связанные с этим, я нажимаю C-x b, я набираю слова, вещь находится наверху штурвала-минибуфера.

Возможно, вы найдете многооконный рабочий процесс, который будет соответствовать вашему стилю.

Копирование, вставка, перемещение линий и т. Д.

Есть целая строка уничтожения, связанная с C-S-backspace.

c-u 80 / C-S-backspace // SECTION C-y

Я не знаю, как повторить последнее действие, которое не является движением. Я часто записываю макрос даже для коротких вещей, которые собираюсь использовать дважды.

Перемещение курсора

C-l вызовет Recenter-Top-Down. Это будет циклически проходить через эти позиции.

Удачи.

0 голосов
/ 03 апреля 2019

Во-первых, вы должны забыть Vi (m). у них разная философия дизайна .

Редактировать код vim быстрее, чем emacs (hjkl быстрее, чем C-n/p/b/f), но emacs поддерживает эффективное редактирование . такие как:

Перемещение курсора / Прыжок

режим туза-прыжка очень хорошо. Я привязываю режим прыжка к F9.

(define-key global-map (kbd "<f9>") 'ace-jump-mode)
  1. нажмите F9
  2. перейти к экрану в любом месте с началом слова char
  3. индекс ввода символов

Окно навигации

  • C-x 3 вертикальная разделительная рамка
  • C-x 2 горизонтальная разделительная рамка
  • C-x 1 закрыть другой кадр, кроме текущего (не закрыть файл)
  • C-x 0 закрыть текущий кадр

Я думаю, что разделенное окно emacs лучше, чем vim (:split), но переключить окно надо, чем vim (C-x o). Вы можете использовать emacs-winum :

(setq winum-keymap
    (let ((map (make-sparse-keymap)))
      (define-key map (kbd "C-c `") 'winum-select-window-by-number)
      (define-key map (kbd "M-0") 'winum-select-window-0-or-10)
      (define-key map (kbd "M-1") 'winum-select-window-1)
      (define-key map (kbd "M-2") 'winum-select-window-2)
      (define-key map (kbd "M-3") 'winum-select-window-3)
      (define-key map (kbd "M-4") 'winum-select-window-4)
      (define-key map (kbd "M-5") 'winum-select-window-5)
      (define-key map (kbd "M-6") 'winum-select-window-6)
      (define-key map (kbd "M-7") 'winum-select-window-7)
      (define-key map (kbd "M-8") 'winum-select-window-8)
      map))

переключить кадр на Meta + 0/1/2/3 ..., очень удобно.

Я также рекомендую Компания и Шлем / Плющ


Emacs работает как IDE, тяжелый; Vim, как редактор, легкий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...