В последнее время я пытался попасть в emacs, и одна из вещей, которые мне нужно исправить, - это отступы.
Пример 1:
sub foo {
my $bar = 'quux';
|
Пример 2:
sub foo {
my $bar = 'quux'; |# foo
Представьте, что вертикальная черта в приведенных выше примерах указывает на позицию курсора. Теперь я использую (4) пробела для каждого уровня отступа (без вкладок), и у меня есть настройка emacs для автоматического отступа моего кода с учетом этого. Никаких проблем нет. Но в приведенных выше примерах, если бы я нажал клавишу возврата на указанную позицию курсора, я хочу, чтобы emacs полностью вернул назад на следующий уровень отступа (столбец / 4). То есть я хочу, чтобы предыдущий пробел обрабатывался так, как если бы он состоял из вкладок. Вместо этого он всегда просто стирает один пробел.
В vim я включаю 'expandtab', чтобы он вставлял пробелы вместо табуляции, и 'softtabstop', что делает (среди прочего) backspace до следующей «мягкой табуляции», как описано выше.
В emacs, я полагаю, я мог бы (если бы я знал emacs / elisp лучше) связать backspace с функцией, которая делает что-то вроде следующего:
if indent-tabs-mode is nil
if the cursor position is preceded by whitespace
calculate the position of the previous "soft tabstop"
if there's enough whitespace
backspace all the way to that point
else
backspace by one character
Я хочу знать, есть ли более простой способ сделать это и / или знает ли кто-нибудь о существующем решении?
cperl-electric-backspace
. (Хотя эта функция не делает ничего критического, поэтому вы можете обойтись без того поведения, которое она обеспечивает.) - person cjm   schedule 20.09.2009