buffer末尾显示在window的位置,如何修改?

也就是希望 这句 (provide 'init) 应该出现在整个窗口的最下方,而不是在上面

我依稀记得几年前刚用Emacs的时候有看见过这么一条配置,但是现在找了半天都找不到,主要是描述不清楚这个行为。。。

简单地 google 了一下,帮你找到了答案:

我把答案粘贴过来了:

(add-hook 'post-command-hook 'my-eob-recenter)
(defun my-eob-recenter ()
  (when (pos-visible-in-window-p (point-max))
    (save-excursion
      (goto-char (point-max))
      (recenter -1))))

赞,但是好像不是特别完美,每次随便执行什么命令都要执行啊。。。我怎么记得很久以前见到过这么一个变量控制这个行为的来着。

不会每次都执行,那个when 语句为真的时候才执行

每次都执行的函数只有一个 pos-visible-in-window-p,那个是 c 函数,对性能影响不大

是的,但是这个方法却是杀伤力太大了~话说这个问题居然是Magit作者提问的

嗯嗯,是的,大神也有需要提问的时候 :joy:

他也希望有一个 polished mode 来处理这个问题,但是貌似没有等到:

Yes, that’s basically what I was hoping for. We will see how it holds up in practice. I have upvoted your answer but will wait with accepting it; I am still hoping for a polished mode that also takes care of special cases. But thanks a lot! That already helps quite a bit.

设置平滑滚动? 一直用触控版滚屏的。

(setq scroll-conservatively 1) 数字酌情修改,我没设置这个,也不知道多少合适

这个属性很接近但是也会误伤,我一般用GUI + 鼠标滚轮的,所以要禁止这个屏幕跳动的功能。 (setq scroll-conservatively most-positive-fixnum) 这么配置就不会在滚动的时候跳动了

事实上我需要的是这样的功能

就像Sublime 一样,末尾就是末尾,没法再往下移动了(键盘鼠标都没法滚动),而Emacs好像多了个Feature, 末尾之后可以继续往下用鼠标滚,可能是为了方便编辑吧

我认为是个好的 feature:

  • 比较容易让用户意识到,已经到末尾了。如果到达末行不允许继续滚动,我首先怀疑鼠标坏了?应用死了?除非看到类似 ;;; foo.el ends here 这种标识,才意识到:噢,到末尾了… iOS 的边界橡皮筋回弹效果,应该基于这种考虑。

  • 把末行移到屏幕中间,首先减少视线移动的距离。其次,接着往末尾追加内容的时候,下边有半屏的空白,而不是在屏幕底部一行一行的挤牙膏,感觉很局促。

Vim,VSCode(我没设置,应该是默认就开启了)也有这个特性。Atom 等其它编辑器不知道有没有,也可能是默认关闭了。

3 个赞

富文本编辑器基本也有这样的设计。比如Scrivener。

如果是分不清空行,可以考虑用 indicate-empty-lines

1 个赞