我一直在使用Emacs,我真的很想念一个古老的Geany快捷方式 - “C-i”和“C-u”。
“C-i”缩进整个当前行(将鼠标光标保持在原位),“C-u”取消整个当前行。
我为Emacs找到了许多缩进命令,有些缩进了一个区域。基本上,我需要的是Vim的“>>”和“<<”,但将鼠标光标保持在原位。
然而,我的主要疑问是,我只能缩进当前行。
有什么想法吗?提前谢谢!
修改 Tab添加两个空格,我想要在行的任何位置,并在行的开头添加两个空格,或从行的开头删除两个空格。
答案 0 :(得分:5)
这是我在emacs中对我的TAB键的默认行为,它运行命令indent-for-tab-command
。来自documentation pages之一:
在编程模式中,在行的开头添加或删除一些空格和制表符的组合,给出前面几行中的文字。如果该区域处于活动状态并跨越多行,则所有这些行都以这种方式缩进。如果point最初位于当前行的缩进内,则在该缩进之后定位;否则,它将保留在新缩进文本中的同一点。请参阅程序缩进。
另外值得注意的是tab-always-indent
变量:
变量tab-always-indent调整(indent-for-tab-command)命令的行为。默认值t给出上述行为。如果将值更改为符号complete,则首先尝试缩进当前行,如果该行已缩进,则尝试在点处完成文本(请参阅符号完成)。如果值为nil,则仅当point位于左边距或行的缩进中时才缩进当前行;否则,它会插入一个真正的制表符。
答案 1 :(得分:0)
我的init.el中有这个文件:
(defun rofrol/indent-region(numSpaces)
(progn
; default to start and end of current line
(setq regionStart (line-beginning-position))
(setq regionEnd (line-end-position))
; if there's a selection, use that instead of the current line
(when (use-region-p)
(setq regionStart (region-beginning))
(setq regionEnd (region-end))
)
(save-excursion ; restore the position afterwards
(goto-char regionStart) ; go to the start of region
(setq start (line-beginning-position)) ; save the start of the line
(goto-char regionEnd) ; go to the end of region
(setq end (line-end-position)) ; save the end of the line
(indent-rigidly start end numSpaces) ; indent between start and end
(setq deactivate-mark nil) ; restore the selected region
)
)
)
(defun rofrol/indent-lines(&optional N)
(interactive "p")
(indent-rigidly (line-beginning-position)
(line-end-position)
(* (or N 1) tab-width)))
(defun rofrol/untab-region (&optional N)
(interactive "p")
(rofrol/indent-region (* (* (or N 1) tab-width)-1)))
(defun rofrol/tab-region (N)
(interactive "p")
(if (use-region-p)
(rofrol/indent-region (* (or N 1) tab-width)) ; region was selected, call indent-region
(rofrol/indent-lines N); else insert spaces as expected
))
(global-set-key (kbd "C->") 'rofrol/tab-region)
(global-set-key (kbd "C-<") 'rofrol/untab-region)