Последняя строка в Emacs - PullRequest
0 голосов
/ 06 марта 2012

enter image description here

Как вы можете видеть на этом изображении, я могу переместить курсор на последнюю строку (если я использую RET в последнем столбце последней строки), а последняя строка не 'в левом столбце номера строки не отображается.

Он также не выделяется, но как только я наберу его, например, если я введу «а», он будет выделен и появится в списке номеров строк.слева.

Это очень маленькая ошибка, но она немного раздражает меня - это действительно не главная проблема, но мне бы очень хотелось, как ее исправить.

Спасибо!

Ответы [ 3 ]

8 голосов
/ 06 марта 2012

На самом деле, это не ошибка. Строка пуста и на ней ничего нет. Так что на самом деле он не считается «строкой», пока на нем нет контента. Самым последним символом в файле является символ новой строки в строке 99. Строка 100 функционально обрабатывается как «она не существует», пока в ней нет содержимого.

6 голосов
/ 06 марта 2012

Если вы используете пакет Linum для номеров строк (в левом поле), здесь патч, который нумерует последнюю строку буфера:

--- linum.el-rev474.svn000.tmp.el   Fri May 08 11:30:24 2009
+++ linum.el    Fri May 08 11:29:38 2009
@@ -135,8 +135,15 @@
-  (let ((line (line-number-at-pos))
-        (limit (window-end win t))
-        (fmt (cond ((stringp linum-format) linum-format)
-                   ((eq linum-format 'dynamic)
-                    (let ((w (length (number-to-string
-                                      (count-lines (point-min) (point-max))))))
-                      (concat "%" (number-to-string w) "d")))))
-        (width 0))
+  (let* ((line (line-number-at-pos))
+         (limit (window-end win t))
+         ;; set empty-line-at-eob flag
+         (empty-line-at-eob (or (equal ?\n (char-before (point-max)))
+                                (equal (point-min) (point-max))))
+         ;; we will automatically number the line at eob if it's not empty
+         ;; (so we'll say it's already done)
+         (numbered-line-at-eob (not empty-line-at-eob))
+         (fmt (cond ((stringp linum-format) linum-format)
+                    ((eq linum-format 'dynamic)
+                     (let* ((c (count-lines (point-min) (point-max)))
+                            (w (length (number-to-string
+                                        (+ c (if empty-line-at-eob 1 0))))))
+                       (concat "%" (number-to-string w) "d")))))
+         (width 0))
@@ -146 +153,2 @@
-    (while (and (not (eobp)) (<= (point) limit))
+    ;; stop if point>limit, or if eobp and numbered-line-at-eob
+    (while (and (not (and (eobp) numbered-line-at-eob)) (<= (point) limit))
@@ -165,0 +174,4 @@
+      ;; before moving forward, if we're already at eob
+      (if (eobp)
+          ;; then we've numbered the empty line
+          (setq numbered-line-at-eob t))
2 голосов
/ 06 марта 2012

Вы можете отредактировать linum.el , если вы действительно хотите изменить функциональность. Здесь - это код для выполнения того, что вы хотите.

Однако вы должны знать, что это не ошибка.То, что вы хотите, субъективно;это было дизайнерское решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...