Эквиваленты Emacs dd Vim, o, O

Я в настоящее время играю вокруг с emacs и довольный большинством понятий. Но я действительно обожал удобство трех команд энергии: dd, o, O, Надо надеяться, который можно сказать мне, как зеркально отразить их в emacs:)

dd - удаляет целую строку, включая новую строку, неважно, где курсор.

Я нашел что-то подобным для добиваний цели:

C-a C-k C-k

В то время как C-a перемещает курсор в начало строки, первого C-k уничтожает текст, второй уничтожает новую строку. Единственная проблема состоит в том, что это не работает над пустыми строками, где я только должен ввести C-k который довольно неудобен, поскольку я должен использовать различные команды для той же задачи: уничтожение строки.

o/O - создает новую пустую строку ниже / выше курсора и перемещает курсор в новую строку, расположенную с отступом правильно

Ну, C-a C-o почти похож O, просто idention отсутствует. C-e C-o создает пустую строку ниже тока, но не перемещает курсор.

Там какие-либо лучшие решения к моим проблемам, или я должен изучить Lisp и определить новые команды для выполнения моих потребностей?

27
задан ericteubert 31 January 2010 в 21:06
поделиться

5 ответов

Для o и O вот несколько функций, которые я написал много лет назад:

(defun vi-open-line-above ()
  "Insert a newline above the current line and put point at beginning."
  (interactive)
  (unless (bolp)
    (beginning-of-line))
  (newline)
  (forward-line -1)
  (indent-according-to-mode))

(defun vi-open-line-below ()
  "Insert a newline below the current line and put point at beginning."
  (interactive)
  (unless (eolp)
    (end-of-line))
  (newline-and-indent))

(defun vi-open-line (&optional abovep)
  "Insert a newline below the current line and put point at beginning.
With a prefix argument, insert a newline above the current line."
  (interactive "P")
  (if abovep
      (vi-open-line-above)
    (vi-open-line-below)))

Вы можете связать vi-open-line, скажем, M-insert следующим образом:

(define-key global-map [(meta insert)] 'vi-open-line)

Для dd, если вы хотите, чтобы убитая линия попала в кольцо убийств, вы можете использовать эту функцию, которая обертывает килл-линию :

(defun kill-current-line (&optional n)
  (interactive "p")
  (save-excursion
    (beginning-of-line)
    (let ((kill-whole-line t))
      (kill-line n))))

Для полноты, она принимает аргумент префикса и применяет его к килл-линии , так что она может убить намного больше, чем "текущая" строка.

Вы также можете посмотреть на источник для viper-mode , чтобы увидеть, как он реализует эквивалентные команды dd, o и O.

27
ответ дан 28 November 2019 в 04:22
поделиться

Для DD используйте «kill-Ell-line», который связан с «C-S-Backspace» по умолчанию в последних версиях Emacs.

Я должен добавить, что я сам пользуюсь цельнополосной или регионом чаще, с CW легче ввести, чем CS-Backspace Отказ

23
ответ дан 28 November 2019 в 04:22
поделиться

Направленные графические модели являются способом кодирования причинных отношений между переменными. Вероятностные графические модели представляют собой способ кодирования причинности вероятностязма. Я бы порекомендовал чтение этой книги , написанную Judea Pearl, которая является одним из пионеров в поле (которую я вижу, вы относитесь к бумаге, который вы упомянули в комментарии).

Направленный график - это просто график (узлы и ребра), которые направлены (ребра имеют направления). Причинные модели являются моделями, которые сообщают вам, как переменные влияют друг на друга, один способ сделать это использует направленные графики. Исследование AI показало, что детерминированные причинные отношения недостаточны для того, чтобы кодировать знание мира вокруг нас, потому что оно слишком грязно. Вот почему вероятность была добавлена ​​к картинке.

-121--3007042-

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

2
ответ дан 28 November 2019 в 04:22
поделиться

Да, это правда. Класс наследует все элементы данных из своего базового класса, включая VTable. Тем не менее, записи VTable регулируются соответственно (например, если класс переопределяет виртуальный метод базового класса, соответствующая запись в VTBAL должна указывать на собственную реализацию).

Но имейте в виду, что концепция «VTABLE» является обычной практикой, используемой, используемой каждый компилятор, но она не является обязательной, ни стандартизированной.

-121--2154746-

Просто используйте VIPER-MODE , VIMPULSE или Режим VIM , emacs Keybindings не так же эргономичны.

0
ответ дан 28 November 2019 в 04:22
поделиться

Вот как я решил проблему отсутствия у Emacs команды "О" вроде vi:

(defadvice open-line (around vi-style-open-line activate)
  "Make open-line behave more like vi."
  (beginning-of-line)
  ad-do-it
  (indent-according-to-mode))

С этим я никогда не чувствовал необходимости в соответствующей версии команды "О" vi. C-n C-o делает трюк.

Что касается команды "dd", то она сначала немного натерлась, но в конце концов я пришел к тому, как Emacs делает вещи. В любом случае, когда я хочу удалить сразу несколько строк, что часто бывает, я просто делаю это, используя регион (C-a C-SPC, перейдите к другому концу текста, который я хочу удалить, C-w). Или, если я могу видеть количество удаляемых строк, я сделаю, например, M-9 C-k, чтобы удалить девять строк сразу.

1
ответ дан 28 November 2019 в 04:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: