有没有人知道如果对于emacs存在类似这样的Vim相对行号的话?我使用vimpulse和man,这将是非常方便的!我知道一些口齿不清,所以如果没有,我可以尝试自己做,如果我在正确的方向得到一个点.
更新:由于正确的响应,我想出了这个,它将显示当前行的1,以及前一行的-1,用于与vimpulse yanks和deletes组合.
非常感谢所有帮助过的人!我知道这不完全是Vim所做的,但是vim中从0开始的相对行号有什么用呢?愚蠢的vim.
(defvar my-linum-current-line-number 0)
(setq linum-format 'my-linum-relative-line-numbers)
(defun my-linum-relative-line-numbers (line-number)
(let ((test2 (1+ (- line-number my-linum-current-line-number))))
(propertize
(number-to-string (cond ((<= test2 0) (1- test2))
((> test2 0) test2)))
'face 'linum)))
(defadvice linum-update (around my-linum-update)
(let ((my-linum-current-line-number (line-number-at-pos)))
ad-do-it))
(ad-activate 'linum-update)
Run Code Online (Sandbox Code Playgroud) 我正在使用auto-complete-mode我认为非常棒的.我也是一个狂热的粉丝,linum-mode但是当两者一起使用时,我有一个非常恼人的问题,特别是当我在一个新的缓冲区(或一个线路很少的缓冲区)工作时.
基本上缓冲区是'x'行很长但是当自动完成时它会向缓冲区"添加"行,所以linum-mode保持切换,例如,在一列或两列上显示行号,这取决于是否auto-complete建议完成或不.
因此,您键入一个句子,您会看到缓冲区的内容在每次按键时都会从左向右疯狂地移动.这真的很烦人.
我认为解决方案涉及配置linum格式变量,但我不知道如何.
理想情况下,如果我的linum格式是:
我的理由是,auto-complete不应该提出超过'y'的建议,因此,两者应该开始很好地一起玩.
例如,如果'y'设置为20而我的缓冲区有75行,那么linum应该使用两列:因为无论我在哪里auto-complete都不会使缓冲区"大于"99行.
相反,如果'y'仍然设置为20并且我的缓冲区有95行,那么linum应该使用三列,否则如果我接近缓冲区的末尾并且auto-complete在我的缓冲区中踢,则应该开始"左右摇晃"当我输入.
我宁愿不硬编码"3列宽" linum.
我想使用"动态但总是至少两列"会以某种方式解决大多数烦恼,但仍然像我描述的那样会很棒.
PS:我意识到我的"修复"意味着linum总是会显示在至少两列上,我很好...只要它保持右对齐并使用2,3或4列,具体取决于需要.
许多商业文字处理器具有默认行为,当文档中的文本行小于可见窗口时,该行为自动隐藏垂直滚动条; 并且,当文档中的文本行大于可见窗口时,滚动条会自动出现.Emacs缺少这种能力,我希望它能成为各种不同模式的默认行为.
有没有人有一些想法如何随着文档的大小(文本行)增加或减少自动删除或添加滚动条?
我在考虑将相关线程中的@phils先前的样本编织到行号的函数中:https://stackoverflow.com/a/10593165/2112489
即使我不使用它,我也希望它能够正常工作linum-mode.但是,我不认为滚动条功能应该在每个命令之后运行 - 它应该仅在添加或减去新行时运行,并考虑visual-line-mode(即,包装处于活动状态)可能处于活动状态.
以下片段的灵感来自@ abo-abo先前在相关主题中的回答:https: //stackoverflow.com/a/20923695/2112489
(cond
((not (> (count-lines (point-min) (point-max)) (window-height)))
(set-window-scroll-bars (get-buffer-window (buffer-name) (selected-frame)) 0 nil))
((and
(> (count-lines (point-min) (point-max)) (window-height))
(not (equal (window-scroll-bars) `(15 2 t nil))))
(set-window-scroll-bars (get-buffer-window (buffer-name) (selected-frame)) 15 'right)))
Run Code Online (Sandbox Code Playgroud)
编辑(2014年1月17日):工作草案基于@Drew对此主题的有用答案.
编辑(2014年1月19日):添加了一个函数,用于计算每个自动换行vertical-motion.在initial-frame-default创建初始帧之后设置似乎由Emacs读取,因此滚动条可以瞬间可见 - 为避免看到这一点,修改初始帧的帧参数似乎可以解决此视觉问题.现在使用window-text-height而不是window-height- 返回的高度不包括分隔符,模式行,任何标题行,也不包括文本区域底部的任何部分高度行. 复制使用的方法linum-mode- 使用 - post-command-hook,the change-major-mode-hook,和window-configuration-change-hook).添加window-live-p条件以避免post-command-hook …