Заставить вкладки Emacs вести себя точно так же, как вкладки vim

В настоящее время я изучаю Emacs и пытаюсь настроить свой файл инициализации. Сейчас это выглядит так (нашел где-то в сети):

(setq indent-tabs-mode t)
(setq-default indent-tabs-mode t)
(global-set-key (kbd "TAB") 'self-insert-command)
(setq default-tab-width 4)
(setq tab-width 4)
(setq c-basic-indent 4)

Но это не похоже на стиль вкладок Vim.

Я просто хочу, чтобы при использовании вкладок он вел себя как Vim. Это означает, что нельзя заменять табуляции пробелами (я думаю, что Emacs делает это по умолчанию).

Так что каждый может редактировать файлы на предпочитаемой ширине вкладки. Я обычно использую 4 для ширины табуляции. И когда я нажимаю Backspace, он переходит на тот же номер назад, что означает, что если я установил tab на 4 и нажал Tab, он вернется на 4 символа после того, как я нажал Backspace. Также всегда следует использовать 4 пробела для табуляции. Потому что иногда в emacs этого не происходит.


person rob    schedule 24.06.2011    source источник
comment
Отступы в Emacs - довольно сложная тема, но я думаю, что стоит потратить некоторое время, чтобы разобраться в некоторых деталях. Дополнительную информацию см. В emacswiki.org/emacs/CategoryIndentation.   -  person phils    schedule 25.06.2011


Ответы (1)


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

Самый простой способ справиться с вкладками - никогда не использовать их. Так что не удивляйтесь, если настройка вкладок так, как вам нравится, потребует немного усилий.

Вы настроили клавишу Tab для вставки символа табуляции. В Emacs это не принято: обычно клавиша Tab используется для отступа текущей строки. То, что вы сделали, достаточно для значения по умолчанию, но в языковых режимах все еще может быть отступ на Tab. Судя по вашему включению c-basic-indent, я предполагаю, что вы работаете над кодом C; поэтому вам нужно указать режиму C, что вы не хотите, чтобы Tab имел отступ. Это должно сделать это:

(eval-after-load "cc-mode"
  '(define-key c-mode-map (kbd "TAB") 'self-insert-command))

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

(global-set-key (kbd "DEL") 'backward-delete-char)
(setq c-backspace-function 'backward-delete-char)
person Gilles 'SO- stop being evil'    schedule 25.06.2011
comment
Я использую настройку vim по умолчанию, за исключением того, что я использую позицию табуляции на 4. Теперь это работает довольно хорошо, спасибо. - person rob; 25.06.2011
comment
После установки точки с запятой emacs сдвигает строку влево на два символа. Вы знаете, как это выключить? Мой файл инициализации в настоящее время выглядит так (setq indent-tabs-mode t) (global-set-key (kbd DEL) 'backward-delete-char) (setq c-backspace-function' backward-delete-char) (setq- по умолчанию indent-tabs-mode t) (global-set-key (kbd TAB) 'self-insert-command) (setq default-tab-width 4) (setq tab-width 4) (setq c-basic-indent 4) (setq backup-inhibited t) (eval-after-load cc-mode '(define-key c-mode-map (kbd TAB)' self-insert-command)) (delete-selection-mode t) (setq auto-) save-default nil) - person rob; 26.06.2011
comment
@rob Если вы не хотите, чтобы Emacs автоматически изменял отступ при нажатии ; (и нескольких других символов), отвяжите их в c-mode-map с помощью (eval-after-load "cc-mode" '(define-key c-mode-map ";" nil)). Если вы жалуетесь на то, что Emacs не делает отступ до необходимого вам количества столбцов, сообщите ему, какой у вас любимый стиль отступа; см. руководство по режиму C. - person Gilles 'SO- stop being evil'; 26.06.2011