Emacs:符合换行的行号

时间:2013-07-05 02:38:32

标签: emacs

模式:我使用linum作为行号,相对于相对行号使用linum-relative包。如果重要,我也使用视线模式。这些都很灵活。

目前,单行(即没有换行的文本)仅被编号为一行,无论其被包裹多少次。我想知道是否有办法改变编号以尊重这些包装。所以,例如,

263   This is all in
      a single line
      without newlines

可能会成为:

263   This is all in
264   a single line
265   without newlines

,以相对模式:

0     This is all in
      a single line
      without newlines

可能会成为:

-1    This is all in
0     a single line
1     without newlines

我真的只想要改变相对模式,但不介意它是否会溢出到绝对模式。

对两者都有效的切换更改将非常有用 - 这样,用户可以专门选择何时或使用哪种模式将其关闭或打开。

1 个答案:

答案 0 :(得分:4)

如果目标是导航,我建议通过流行的ace-jump-mode提供类似的解决方案。

如果目标只是持久性行号,您可以考虑longlines-mode而不是visual-line-mode(但我个人会避免这种情况)。

ace-jump @ GitHub
https://github.com/winterTTr/ace-jump-mode

演示:
http://dl.dropboxusercontent.com/u/3254819/AceJumpModeDemo/AceJumpDemo.htm

有了它,你可以用两个按键跳到任何一行。

除了线条,你可以跳到任何单词的开头;还有单独的字符级跳转精度。如果需要,它可以配置为限制跳转到当前窗口/缓冲区,或当前帧中的所有窗口,甚至是多帧。

但是,它不会将包裹线识别为可跳转位置。同样,可能会认为longlines-mode是对此的修复,如果真的对您很重要,但据我所知,它被认为是hack'ish并且已经弃用了赞成visual-line-mode。但是,使用longlines-mode时,行会在第一个示例中完全按照您的要求重新编号。

我假设目标是导航,因此,我认为只需要一点点练习即可找到基于单词的跳跃,甚至通过增量搜索跳跃成为一种出色的解决方案。

更新

这是一个简单的解决方案,使用emacs缩小功能来欺骗ace-jump在N行内扫描;也许其他人可以改进它。您也可以为单词和行模式执行类似的操作。

(defun brian-ace-jump-to-char-within-N-lines (&optional n)
  (interactive "p")
  (let* ((N (or n 0))
     (query-char (read-char "Query Char:"))
     (start (save-excursion
          (forward-line (- N))
          (point)))
     (stop (save-excursion 
         (forward-line (1+ N))
         (point))))
    (unwind-protect
    (condition-case err 
        (progn
          (narrow-to-region start stop)
          (ace-jump-char-mode query-char))
      (error 
       (message (error-message-string err))))
      (widen))))