我最近一直在尝试使用emacs,其中需要掌握的一个要点是缩进。
示例1:
想象一下,上面例子中的管道符号表示光标位置。现在,我使用(4)个空格作为每个缩进级别(没有制表符),并且我已经设置了emacs自动缩进我的代码以便考虑这一点。没有任何问题。但是在上面的示例中,如果我在指示的光标位置按退格键,则希望emacs一直向后退到下一个缩进级别(列/ 4)。也就是说,我希望它将前面的空格视为由制表符组成。相反,它总是只擦除一个空格字符。
在vim中,我打开'expandtab'以使它插入空格而不是制表符,并且打开'softtabstop',使其(除其他外)返回到如上所述的下一个“soft tabstop”。
在emacs中,我想我可以(如果我更了解emacs / elisp)将退格键绑定到执行以下操作的函数:
示例1:
sub foo {
my $bar = 'quux';
|
例子2:
sub foo {
my $bar = 'quux'; |# foo
想象一下,上面例子中的管道符号表示光标位置。现在,我使用(4)个空格作为每个缩进级别(没有制表符),并且我已经设置了emacs自动缩进我的代码以便考虑这一点。没有任何问题。但是在上面的示例中,如果我在指示的光标位置按退格键,则希望emacs一直向后退到下一个缩进级别(列/ 4)。也就是说,我希望它将前面的空格视为由制表符组成。相反,它总是只擦除一个空格字符。
在vim中,我打开'expandtab'以使它插入空格而不是制表符,并且打开'softtabstop',使其(除其他外)返回到如上所述的下一个“soft tabstop”。
在emacs中,我想我可以(如果我更了解emacs / elisp)将退格键绑定到执行以下操作的函数:
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
上。(尽管该函数并不执行任何关键操作,所以你可以不使用它提供的行为。) - cjm