Удаление вкладок Emacs c ++ для удаления пробелов - PullRequest
0 голосов
/ 01 ноября 2019

Я видел много вопросов по теме emacs и табуляции / пробелов, но никто не говорил об этом:

У меня emacs в режиме C ++ и табуляция в качестве отступа, если я нажимаю ввод для перехода на новую строку emacsавто-отступ для tab, но если я пытаюсь удалить эту "tab", я удаляю только один пробел.

Я понимаю, что emacs создает вкладки, используя пробелы, но если я хочу удалить эту "tab", я бы хотел удалить4 (или 8) пробела напрямую не по одному, в режиме python работает как задумано, а в режиме c ++ нет. Есть переменная для этого или какой-нибудь обходной путь?

1 Ответ

0 голосов
/ 01 ноября 2019

Ваша клавиша Backspace (<DEL>), вероятно, связана с командой backward-delete-char-untabify. Свяжите это с чем-то другим, например, delete-backward-char.

Из руководства Elisp, узел Режимы программы :

В большинстве языков программирования отступы должны отличаться отстрока за строкой, чтобы проиллюстрировать структуру программы. Следовательно, в большинстве режимов языка программирования ввод <TAB> обновляет отступ текущей строки.

Кроме того, <DEL> обычно привязывается к backward-delete-char-untabify, что удаляет обратную обработку каждой вкладки, как если быэто было эквивалентное количество пробелов , так что вы можете удалить один столбец отступа, не беспокоясь, состоит ли пробел из пробелов или табуляций.

IOW, поведение, которое вам не нравится,предоставляется по умолчанию в используемом вами режиме программирования.

На самом деле, если вы находитесь в c++-mode, <DEL> привязан к команде c-electric-backspace. Документ для этой функции (C-h f c-electric-backspace) сообщает вам:

c-electric-backspace - это интерактивная скомпилированная функция Lisp в cc-cmds.el.

(c-electric-backspace ARG)

Удалите предыдущий символ или пробел.

Если c-hungry-delete-key не является nil (обозначено "/h" в строке режима), тогда все предшествующие пробелы используются. Однако, если указывается префиксный аргумент, или c-hungry-delete-key равен nil, либо точка находится внутри литерала, вызывается функция в переменной c-backspace-function.

И по умолчанию кажется, что значение пользовательской опции c-backspace-function (C-h v) равно ... backward-delete-char-untabify. Таким образом, вы можете просто настроить эту опцию, чтобы установить ее для какой-либо другой функции, такой как delete-backward-char. Это изменит поведение только для режимов C ++ и C.

...