Невозможно связать Enter с 'newline-and-indent в Emacs !!! Очень надоедливый - PullRequest
2 голосов
/ 30 января 2012

Невозможно получить привязку Enter к newline-and-indent в Emacs !!! Очень раздражает.

Я уже попробовал все в следующей теме, изменив 'mode' на ruby, но ничего не сделал:

Как заставить Emacs автоматически вставлять мой код C?

Я знаю, что проблема в ключе RETURN , так как, если я связываюсь с чем-то другим, работает нормально. Я пытался [enter], (kbd "enter"), (read-kbd-macro "enter"), (kbd "RET")


Продолжение 1.

Это то, что я получаю от C-h k RET

RET запускает команду newline, которая представляет собой интерактивно скомпилированный Лисп функция.

Это связано с RET.

(перевод строки и дополнительный ARG)

Вставьте новую строку и переместитесь в левое поле новой строки, если оно пустое. Если use-hard-newlines' is non-nil, the newline is marked with the text-property трудно '. С ARG вставьте так много новых строк. Позвоните auto-fill-function' if the current column number is greater than the value of fill-column ', и ARG будет равен нулю.

Я не знаю, что с этим делать или как выяснить, если это глобальный или местная привязка, которая мешает. пытаясь переназначить C-j также не работает.

Ответы [ 2 ]

6 голосов
/ 30 января 2012

Как сказано в предыдущем комментарии, используйте C-h k (описать-ключ), чтобы увидеть, с чем связан ключ в тот момент, когда он не выполняет то, что вам нужно. Синтаксис (kbd "foo") будет правильным для того, что foo ключ описания описывает его как.

Скорее всего, вы просто не определяете этот ключ в соответствующей таблице ключей.

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

редактирование:

Сам у меня есть функция ловушки для общего поведения для всех режимов программирования, которые я использую, и она включает в себя то, что вам нужно. Соответствующая часть выглядит так:

(defun my-coding-config ()
  (local-set-key (kbd "RET") (key-binding (kbd "M-j")))
  (local-set-key (kbd "<S-return>") 'newline)
  )

(mapc
 (lambda (language-mode-hook)
   (add-hook language-mode-hook 'my-coding-config))
 '(cperl-mode-hook
   css-mode-hook
   emacs-lisp-mode-hook
   ;; etc...
   ))

См. Ответ Daimrod для объяснения того, почему я повторно связываюсь RET с текущим связыванием Mj - хотя я использую comment-indent-new-line (или подобное) вместо newline-and-indent (или аналогичного), который делает то, что я хочу в комментариях и не-комментариях.

В Emacs 24 режимы программирования, кажется, происходят от prog-mode, поэтому вы можете , вероятно, (не проверено) сократить этот список до prog-mode-hook плюс любые исключения для сторонних режимов, которые не пока не делай этого.

2 голосов
/ 30 января 2012

Как было сказано ранее, используйте Ch k Cj , потому что Cj является стандартным ключом для newline-and-indent.

Если вы откроете новый файл, активируйте ruby-mode и попробуйте предыдущую команду, и вы поймете, почему она не работает.Потому что ruby-mode не имеет newline-and-indent, а скорее reindent-then-newline-and-indent.Да, это глупо, но вы можете либо попросить специалиста изменить его, либо принять его.

Однако я предлагаю вам использовать Cj , чтобы сделать это, потому что ruby-mode не единственный режимчтобы сделать это, как paredit-mode, который использует paredit-newline.

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