Как сделать, чтобы Emacs автоматически делал отступ для моего C-кода? - PullRequest
22 голосов
/ 05 мая 2009

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

Я вошел в параметры и обнаружил ловушку режима C, ловушку режима C ++ и т. Д., И они определили два сопоставления клавиш (10 и 13, и я вспомнил, что 0A и 0D - это CR / LF, потому что я часто использовал их в сборка) - я подумал, потому что один сказал "(lambda nil (define-key lisp-mode-map [13] (quote newline-and-indent))", а другой - то же самое, но с (quote newline) вместо этого, я просто поставил -and-indent в конце и решил, что он будет работать.

Но это не так: я установил и сохранил его, попробовал, но безрезультатно. Перезапущенный emacs, все еще безуспешно. Как мне сделать отступ для моего кода? Ужасно безумие, что emacs требует определенного уровня в lisp только для того, чтобы сконфигурировать его для ваших основных нужд.

Кроме того, в качестве своего рода побочного вопроса: как мне скопировать и вставить из буфера обмена ? Уничтожение / восстановление - это удобно, и все, но я ненавижу редактировать -> копировать каждый раз, когда хочу вставить куда-то еще.

- РЕДАКТИРОВАТЬ -

хорошо, я вставил следующие строки в мой .emacs, и это сработало:

(add-hook 'c-mode-common-hook (lambda ()
      (local-set-key (kbd "RET") 'newline-and-indent)))

спасибо за помощь

Ответы [ 7 ]

19 голосов
/ 06 мая 2009

Я установил ключ возврата, чтобы глобально действовать как новая строка и намерение в моем файле ~/.emacs:

(global-set-key "\C-m" 'newline-and-indent)

У меня работает.

15 голосов
/ 05 мая 2009

Посмотрите на emacswiki - autoindent

Как предложено, добавьте следующий код в ваш .emacs

(defun set-newline-and-indent ()
  (local-set-key (kbd "RET") 'newline-and-indent))
(add-hook 'c-mode 'set-newline-and-indent)

Вы можете настроить переменную C Default Styl. В ваших emacs перейдите в Options-> Customize Emacs-> Specific Option, затем введите c-default-style и установите на ваш выбор Делая это, вам не нужно нажимать TAB. Введите с начала строки и при нажатии ";" , он будет автоматически с отступом.

Надеюсь, это поможет

6 голосов
/ 07 мая 2009

Если вы хотите сделать отступ для всего файла c / c ++, просто сделайте

  1. отметить все: CTRL-x h
  2. нажмите клавишу TAB

Это, кстати, также работает для XML, кода Python и других типов.

6 голосов
/ 05 мая 2009

В дополнение к другим предложениям, попробуйте C-c C-a, чтобы переключить функцию авто-новой строки, чтобы ваша моделин читала C/la. Тогда вам даже не нужно нажимать Enter большую часть времени; вместо этого, когда вы вводите точку с запятой или фигурную скобку, вставляются символы новой строки, и ваш код имеет отступ. Иногда вам нужно нажать Enter, и вы не получите автоиндентирование (если вы не перепривязываете RET, как предложено в другом ответе), но если вы все равно просто начнете печатать следующую строку, вы можете заметить, что при правильном отступе введите знак препинания.

Чтобы начать работу с "степенью Лиспа", введите C-h i для браузера информации и перейдите к узлу "Режим CC" (он отдельный от узла для Emacs; введите d для каталога и найдите CC Режим есть).

1 голос
/ 05 мая 2009

Попробуйте [enter], (kbd "enter") или (read-kbd-macro "enter"), они все делают немного разные вещи;)

Кроме того, для меня просто работает копирование / вставка. Можете ли вы попробовать запустить emacs -q и посмотреть, работает ли он? Если это так, это может быть проблема с вашим .emacs.

У меня также есть:

(when window-system
  ;; use extended compound-text coding for X clipboard
  (set-selection-coding-system 'compound-text-with-extensions))

но это может сделать что-то еще;)

0 голосов
/ 12 октября 2014

Простой способ сделать это - использовать electric-indent-mode. Если вы хотите включить его вручную, просто наберите

M-x electric-indent-mode

Чтобы включить его автоматически, произнесите в вашем .emacs следующее:

(electric-indent-mode)

Это будет по умолчанию в Emacs 24.4.

0 голосов
/ 05 мая 2009

копирование: перейти к началу, CTRL-пробел, перейти к концу, ALT-W

вставка: CTRL-y

в Unix: левая мышь для копирования, правая мышь для вставки

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