如何在GNU Emacs中逐行滚动?
简而言之,我试图在vim和大多数其他编辑器中滚动emacs; 当我例如,从底部/顶部两行,并按下/向上( CTRL – P , N , ↑ , ↓ )只有一行上下,而不是一半的屏幕。
请参阅EmacsWIki上的一些build议:
(setq scroll-step 1 保守地滚动10000)
如果要准确定位屏幕,可以使用Ctrl-L。
-
默认情况下,它将当前行放在屏幕中间。
-
ESC 0 Ctrl-L将当前行定位在顶部。
我晚了一点,但是如果你不介意安装一个软件包,那么平滑滚动 ( github ,也可以在MELPA中find )可能就是你正在寻找的东西 – 它对我来说肯定是有用的 。
一旦你安装了它,你可以在你的init.el中popup以下内容:
(require 'smooth-scrolling) (smooth-scrolling-mode 1) (setq smooth-scroll-margin 5)
最后一行是可选的; 它开始在屏幕边缘附近而不是在屏幕边缘滚动,所以在这一点上你总是会得到一个小小的背景。 适应口味。
我的解决scheme不是更改Emac的默认滚动,而是从macros创build键序列命令。 这样,您可以方便地一次滚动一行。 不理想,但超级简单。 只是M-(↓)和M-(↑)是可用的,所以这就是我使用的。
我就是这么做的 首先,你需要logging一个macros的一行滚动,上下。
开始macros
Cx (
向下滚动一个
Cu 1 Cv
停止macros
Cx )
为了向上滚动,使用
Cu 1 Mv
接下来你需要命名macros。
Mx name-last-kbd-macro
提示时提供一个名称,如:
down-one-line
然后,只需使用以下命令将键序列绑定到该命令名称即可:
Mx global-set-key
并在提示时,使用如下所示:
M-(down arrow)
然后它会问你要绑定哪一个命令,你应该给它一个你以前发明的名字,例如下一行。
这是我得到这些信息的地方。 您还可以在下面和其他地方find有关将macros添加到.emacs文件的说明。
这里为macros定义的解释
这里介绍如何控制滚动
自2000年以来,我一直在我的.emacs
文件中使用这些文件。
(global-set-key (quote [M-down]) (quote View-scroll-line-forward)) (global-set-key (quote [M-up]) (quote View-scroll-line-backward))
这样,我可以保持Emacs的默认行为,并一次滚动一行,这取决于我在做什么。
直到至lessGNU Emacs 22.我最近升级到Emacs 24,发现View-scroll-line-forward
和View-scroll-line-backward
不再可用。 经过一番狩猎之后,我发现了滚动线和滚动线的工作。 所以如果你使用Emacs 24,你可以使用这个。
(global-set-key (quote [M-down]) (quote scroll-up-line)) (global-set-key (quote [M-up]) (quote scroll-down-line))
我大多跳过Emacs 23,所以如果这是你使用的版本,你可以尝试以上两个。
注意: scroll-up-line
实际上向下滚动一行,因为缓冲区被移动一行。
我重新绑定我的箭头键来执行滚动操作。
(global-set-key [up] (lambda () (interactive) (scroll-down 1))) (global-set-key [down] (lambda () (interactive) (scroll-up 1))) (global-set-key [left] (lambda () (interactive) (scroll-right tab-width t))) (global-set-key [right] (lambda () (interactive) (scroll-left tab-width t)))
简单的做到这一点:
(global-set-key [M-up] (lambda () (interactive) (scroll-up 1))) (global-set-key [M-down] (lambda () (interactive) (scroll-down 1)))
然后元光标向上移动,元光标向下移动。
QED。 不知道以上所有的人都在吸烟!
我在.emacs文件中有以下内容来启用一个很好的ctrl-up,ctrl-down滚动行为。 我也用这个鼠标滚轮。
(defun scroll-down-in-place (n) (interactive "p") (previous-line n) (scroll-down n)) (defun scroll-up-in-place (n) (interactive "p") (next-line n) (scroll-up n)) (global-set-key [mouse-4] 'scroll-down-in-place) (global-set-key [mouse-5] 'scroll-up-in-place) (global-set-key [C-up] 'scroll-down-in-place) (global-set-key [C-down] 'scroll-up-in-place)
Mx customize-variable scroll-conservatively
将其设置为1。
不过,你并不是真的想这样做。
要让“vim”滚动,把它放到你的.emacs文件中:
(defun next-line-and-recenter () (interactive) (next-line) (recenter)) (defun previous-line-and-recenter () (interactive) (previous-line) (recenter)) (global-set-key (kbd "Cn") 'next-line-and-recenter) (global-set-key (kbd "Cp") 'previous-line-and-recenter)
如果您正在寻找快速创build类似滚动效果的方法,请按顺序inputCn
和Cl
,然后将光标向下移动,然后居中放置。
如果你在.xsession中启动emacs,在我的情况下,设置滚动保守地为100+将不起作用,也不会滚动步骤1.但是,如果你在X之后启动emacs,它将起作用。
因为使用M-up , M-down会很麻烦,因为它会干扰重载这些命令的组织模式。 为了避免这个问题,我亲自使用那些结合了M-page-up M-page-down的命令 。在这里,我将滚动向上和向下定义为1行。
;;;scroll by `number-of-lines' without the cursor attached to the screen (global-set-key [M-prior] (lambda () (interactive) (let ((number-of-lines 1)) (scroll-down number-of-lines) (forward-line (- number-of-lines))))) (global-set-key [M-next] (lambda () (interactive) (let ((number-of-lines 1)) (scroll-up number-of-lines) (forward-line number-of-lines)))) ;;;scroll by `number-of-lines' with the cursor attached to the screen (global-set-key [SM-prior] (lambda () (interactive) (let ((number-of-lines 1)) (scroll-down number-of-lines)))) (global-set-key [SM-next] (lambda () (interactive) (let ((number-of-lines 1)) (scroll-up number-of-lines))))