Как мне полностью отключить все авто-отступы в Emacs? Мне нужно отключить его, по крайней мере, для основного режима, но у меня все в порядке с глобальным отключением для текущего сеанса.
Пожалуйста, прочтите остальную часть этого вопроса, прежде чем объявить его дубликатом. Все остальные ответы, которые я нашел, предназначены для более целенаправленного отключения отступов. Я действительно хочу полностью отключить все авто-отступы для всей сессии.
Установка electric-layout-mode
на nil
не работает.
Детали
Иногда мне нравится составлять большие сообщения коммитов Git с помощью моего текстового редактора Windows ASCII. Эти сообщения часто имеют списки маркеров, блоки кода или другие вещи, для которых точное форматирование в моем исходном документе имеет смысл. Моя кодовая база находится в Linux, и я подключаюсь к коробке с помощью только текстового SSH-клиента. Когда Git входит в Emacs для редактирования сообщения фиксации, я хочу иметь возможность скопировать исходное сообщение фиксации в буфер обмена Windows, а затем вставить его с помощью команд вставки Windows. С точки зрения Emacs, я печатаю то, что было найдено в текстовом файле Windows. К сожалению, когда Emacs видит строки с отступами, он добавляет свой собственный автоматический отступ, поэтому я получаю этот огромный треугольник пустого пространства вдоль левого края буфера.
Я использую GNU Emacs 24.3.1.
Временное решение
Мой текущий обходной путь - перенести мой текстовый файл Windows в файловую систему, смонтированную на моем хосте Linux, загрузить файл в Emacs, а затем использовать kill и yank для передачи содержимого. Это немного неуклюже.
пример
Вот пример блока текста:
a
- b
c
d
Вот как это выглядит, когда я вставляю это в Emacs-under-ssh через MSWin paste:
a
- b
c
d
Если я нажму C-h l
после того, как сделаю пасту, вот что я вижу. Обратите внимание, что переводы строки вводятся с использованием C-j
, а не RET
.
a C-j C-j SPC SPC - SPC b C-j SPC SPC SPC SPC c C-j
SPC SPC SPC SPC d C-j C-h l
источник
hack-local-variables-hook
- чтобы по существу отменить то, что другие основные режимы устанавливают как часть их стандартная инициализация.fundamental-mode
это просто маленькая функция внутриsimple.el
- то есть(kill-all-local-variables) (run-mode-hooks)
.M-x find-function RET fundamental-mode RET
- вы можете изменить / создать свой собственный по мере необходимости; однако, если вы измените имя, оно не будет использоваться некоторыми функциями, поэтому подумайте о том, чтобы сохранить то же имя.:set paste
? Это в основном говорит «не трогайте вставленный текст в любом случае». Что также включает в себя авто-отступ.Ответы:
Emacs ≤24,3
Нажатие RET не делает отступ по умолчанию (за исключением некоторых режимов программирования, для которых вам необходимо проверить конфигурацию, зависящую от режима, например, «электрические» настройки).
Терминалы Unix обычно вставляют символ возврата каретки, когда содержимое буфера обмена содержит новую строку (представленную символом перевода строки). В Emacs возврат каретки выглядит как
RET
ключ (фактически,RET
это символ возврата каретки), а перевод строки выглядит как (есть)C-j
.Однако в вашем случае вставка новой строки приводит к a
C-j
, который в Emacs связан с командойnewline-and-indent
. Как видно из названия, эта команда отступает. Я не знаю, есть ли у PuTTY настройка, которую вы можете изменить. Если вы хотите решить проблему на стороне Emacs, есть простой обходной путь, который, я думаю, вы не будете возражать: привязатьC-j
кnewline
(так же, какRET
).Emacs ≥24,4
В Emacs 24.4 режим электрического отступа включен по умолчанию. Это глобальный второстепенный режим, поэтому вы можете отключить его везде, позвонив по телефону,
(electric-indent-mode 0)
и переключаться в интерактивном режимеM-x electric-indent-mode RET
.Вы можете найти эту информацию в руководстве или, просмотрев документацию по команде, вызванной нажатием Return(нажмите
C-h k RET
).Вы можете включить его в определенный буфер с помощью
electric-indent-local-mode
. Некоторые режимы программирования (особенно сторонние) могут иметь свои собственные функции автоматического отступа, которые не соответствуют настройкам режима электрического отступа.источник
electric-indent-mode
по умолчанию отключено (это соответствует тому, что вы сказали, потому что я использую Emacs 24.3.1). Включение и выключение не помогает.electric-indent-local-mode
не доступен для меня черезM-x
. Помощь вRET
упоминает три параметра:use-hard-newlines
,auto-fill-function
, иfill-column
. Toggling или изменения тех , с помощьюM-x use-hard-lines
,M-x auto-fill-mode
иM-x set-fill-column RET 0 RET
не помогают.emacs -q
? Пожалуйста, вставьте в Emacs какой-нибудь короткий текст с новой строкой (скажем,foo
новой строкойbar
) и нажмитеC-h l
, что вы видите?… f o o RET b a r
или… f o o C-j b a r
или… f o o RET C-j bar
или что-то еще? В каком терминале вы запускаете SSH-клиент?-q
не помогает (напримерemacs -q -nw --no-desktop
). Я вижуC-j
вместоRET
. Я использую PuTTY 0.63 в качестве моего SSH-клиента. Я вижу то же самое поведение сTERM
установленным наscreen
иxterm
.global-set-key
взлом исправил проблему. Я придумаю способ настроить моиEDITOR
псевдонимы для автоматического вызова его при запуске при редактировании сообщений Git commit. Новые строки вставляются вместо возврата каретки, потому что я настроил мой любимый текстовый редактор Windows для использования концов строк в стиле UNIX вместо оконных.Вы также можете попробовать режим вставки в скобках. Это особенность вашего эмулятора терминала (в данном случае PuTTY, версии 0.63 и выше), который использует escape-последовательности, чтобы сигнализировать, что пользователь что-то вставляет, а затем снова, когда вставка заканчивается. Есть пакет Emacs,
bracketed-paste
который вы можете установить, он позволяет Emacs распознавать escape-последовательности и переходить к более безопасной таблице ключей на время вставки. Это не только предотвращает путаницу с отступом, но также предотвращает использование мошеннической вставкой команд в сеансе emacsM-x
.источник