Как заставить Emacs вести себя ближе к обычным редакторам? - PullRequest
0 голосов
/ 09 января 2011

Я использую Emacs 23.1.1 в Ubuntu с Emacs стартовый комплект . Я в основном работаю в режиме lua.

Есть ли способ помешать Emacs быть настолько умным в отношении отступов? Я привык к тупым редакторам и вручную нажимаю все нужные клавиши.

Я хочу использовать два пробела на отступ, табуляция.

Когда я нажимаю RETURN , отступ новой строки должен совпадать с предыдущей строкой.

Когда я нажимаю TAB в начале пробела, содержимое строки должно иметь отступ на одну единицу отступа.

Когда я нажимаю TAB в начале пустой строки, курсор должен переместиться на одну единицу отступа вправо.

О, и я хотел бы получить мягкую перенос слов на 80 th столбце и пробелах после сохранения.

Обновление :

(поместил бы это в комментарии, но его нужно отформатировать)

Если я использую решение Томаса, авто-отступ для RETURN"исправлен", но TAB по-прежнему странно отступает:

local run = function(...)
           x

"x" отмечает место, где появляется курсор после того, как я набрал первую строку и нажал RETURN , TAB .

Ответы [ 2 ]

3 голосов
/ 09 января 2011

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

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

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

Поместите следующий код в файл с именем .emacs в вашем домашнем каталоге (~):

(setq-default indent-tabs-mode nil) ; use spaces for indentation

(defvar my-indentation-width 2
  "The number of spaces I prefer for line indentation.")

(defun my-enter ()
  "Inserts a newline character then indents the new line just
like the previous line"
  (interactive)
  (newline)
  (indent-relative-maybe))

(defun my-indent ()
  "When point is on leading white-space of a non-empty line, the
line is indented `my-indentation-width' spaces. If point is at
the beginning of an empty line, inserts `my-indentation-width'
spaces."
  (interactive)
  (insert (make-string my-indentation-width ? )))

(defun my-indentation-setup ()
  "Binds RETURN to the function `my-enter' and TAB to call
`my-indent'"
  (local-set-key "\r" 'my-enter)
  (setq indent-line-function 'my-indent))

(defun delete-trailing-whitespace-and-blank-lines ()
  "Deletes all whitespace at the end of a buffer (or, rather, a
buffer's accessible portion, see `Narrowing'), including blank
lines."
  (interactive)
  (let ((point (point)))
    (delete-trailing-whitespace)
    (goto-char (point-max))
    (delete-blank-lines)
    (goto-char (min point (point-max)))))

;; make sure trailing whitespace is removed every time a buffer is saved.
(add-hook 'before-save-hook 'delete-trailing-whitespace-and-blank-lines)

;; globally install my indentation setup
(global-set-key "\r" 'my-enter)
(setq indent-line-function 'my-indent)

;; also override key setting of major-modes, if any
(add-hook 'after-change-major-mode-hook 'my-indentation-setup)

Это работает для меня в Emacs 23, хотя я мог пропустить некоторые крайние случаи.Однако эти изменения настолько фундаментальны, что я предсказываю, что рано или поздно вы столкнетесь с несовместимостью с некоторыми основными режимами, которые ожидают, что отступы сработают, и настроят его.Если вы действительно хотите попасть в Emacs, стоит адаптировать привычки, которые вы унаследовали от других редакторов, к тому, как Emacs делает что-либо.

Для мягкого переноса слов существует вспомогательный режим, называемый «ярусами», который вы можете скачать.отсюда: http://www.emacswiki.org/cgi-bin/emacs/download/longlines.el Я не использовал его, поэтому не могу сказать вам, насколько хорошо он работает.

2 голосов
/ 09 января 2011

Исправление TAB и RETURN:

(global-set-key "\t" 'self-insert-command)
(global-set-key "\r" 'newline-and-indent)

Заполнить столбец (не пробовал): скажем ESC x customize-var, введите fill-column, установить 80.

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