#emacs
#emacs
Вопрос:
Я знаю, что есть решения, позволяющие заставить emacs отображать столбец в 80 строк, но я не хочу такого рода визуальных помех. Я бы просто хотел, чтобы он выделял строку, если в ней более 80 символов.
Комментарии:
1. > Я знаю, что есть решения Для тех, кто не знает, например emacswiki.org/emacs/FillColumnIndicator . Возможно, этого не существовало, когда был задан вопрос, и, ИМХО, это не слишком беспокоит, но вкус — это, ну, в общем, дело вкуса.
Ответ №1:
Другой простой вариант — выполнить highlight-lines-matching-regexp
выражение .{81}
.
Каждая строка, содержащая 81 символ или более, будет выделена выбранным вами цветом.
Комментарии:
1. Блестяще. Есть ли какой-либо способ включить это в моем .emacs?
2. Выделение — это настройка для каждого буфера. Однако вы можете добавить привязку к конкретному режиму в свой .emacs следующим образом:
(add-hook 'emacs-lisp-mode-hook '(lambda () (highlight-lines-matching-regexp ".{81}" "hi-green-b")))
. Я не нашел универсального new-buffer-hook для работы со всеми буферами.3. Почему у меня не
(add-hook 'c -mode-hook '(lambda () (highlight-lines-matching-regexp ".{81}" "hi-green-b")))
работает?4. @RNAer Попробуйте это:
(add-hook 'c -mode-hook '(lambda () (highlight-lines-matching-regexp ".\{81\}" 'hi-yellow)))
5. @Juancho
find-file-hook
должно быть тем крючком, который вы искали.
Ответ №2:
Смотрите whitespace-mode
— теперь это часть Emacs и может делать гораздо больше, чем просто выделять длинные строки. (Но, конечно, может использоваться только для этого.)
Комментарии:
1. Можете ли вы объяснить, как это работает? Там есть косвенная ссылка на «длинные строки», но с объяснением того, что делает строку длинной. Если это не 80 символов, как указать 80?
2. Вы можете установить
whitespace-line-column
. Для получения дополнительных опций используйтеM-x customize-group RET whitespace RET
, и вы увидите их все. (Я просто смотрю на исходный код и пишу elisp-код …)3. Я использовал redspace.el ( emacswiki.org/emacs/redspace.el ), но это кажется лучше. Спасибо!
4. Моя проблема с этим заключается в том, что он добавляет кучу других выделений, которые, вероятно, не нужны.
5. @EoghanM, посмотри
whitespace-style
: ты можешь управлять тем, что выделять.
Ответ №3:
Вот моя конфигурация из Emacs Dev Kit:
;; whitespace-mode
;; free of trailing whitespace and to use 80-column width, standard indentation
(setq whitespace-style '(trailing lines space-before-tab
indentation space-after-tab)
whitespace-line-column 80)
В принципе, вам нужен только последний бит, но я нахожу другие настройки весьма полезными (я ненавижу табуляции и завершающие пробелы).
Ответ №4:
Попробуйте highlight-80 .el
. Вы можете получить это из здесь.
Чтобы установить его, просто добавьте следующее в свой .emacs
:
(add-to-list 'load-path "/path/to/highlight-80 ")
(require 'highlight-80 )
Затем вы можете включить его через:
M-x highlight-80 -mode
Комментарии:
1. Автор highlight-80 .el сообщает, что его выпуск прекращен, и рекомендует, начиная с Emacs 23, использовать пробельную строку-столбец в режиме пробелов .
Ответ №5:
Это не совсем то, что вы хотели, но у меня была похожая проблема, и я нашел этот вопрос / ответ. Все, что я хотел, это вставить визуальное руководство, когда оно мне понадобится. Это то, с чем я, наконец, закончил:
(defun insert-80 ()
"Insert an 80-character-wide guide at beginning of line."
(interactive)
(beginning-of-line)
(insert "0 1 2 3 4 5 6 7 |")
(newline)
(insert "01234567890123456789012345678901234567890123456789012345678901234567890123456789|")
(newline)
)
Очень просто, но иногда очень эффективно.
Ответ №6:
Вот некоторый пример кода, который выделит текст, который находится за пределами столбца 80, с текущим заголовком «предупреждение» и строкой, чтобы включить его для режима C .
;; Turn on warn highlighting for characters outside of the 'width' char limit
(defun font-lock-width-keyword (width)
"Return a font-lock style keyword for a string beyond width WIDTH
that uses 'font-lock-warning-face'."
`((,(format "^%s\(. \)" (make-string width ?.))
(1 font-lock-warning-face t))))
(font-lock-add-keywords 'c -mode (font-lock-width-keyword 80))
Это не выделяет всю строку, но я нахожу это достаточно полезным.
Комментарии:
1. Однако с табуляциями это не работает. Смотрите emacswiki.org/emacs/EightyColumnRule для более продвинутого регулярного выражения.
2. Могу ли я применить это для определенного шаблона имен файлов вместо
*mode
? @acm3. @alper — К сожалению, за пределами моих знаний. Может быть, начать новый вопрос?
Ответ №7:
В emacs-goodies-el
есть встроенный пакет (рекомендую установить его в терминал) под названием highlight-beyond-fill-column.el, добавьте это в свой .emacs
или init.el
:
(setq-default fill-column 80)
(add-hook 'prog-mode-hook 'highlight-beyond-fill-column)
(custom-set-faces '(highlight-beyond-fill-column-face
((t (:foreground "red" )))))
Текст за fill-column
пределами, который равен 80 во фрагменте, будет выделен цветом red
. Вы можете настроить лицо так, как вам нравится.
Комментарии:
1. Может быть, с помощью
set-face-attribute
?custom-set-faces
их не предполагается трогать вручную.
Ответ №8:
Это похоже на другие ответы здесь, с преимуществом использования fill-column
, и оно выполняется после переключения режима. Таким образом, каждый режим может иметь свою собственную ширину строки, которая должным образом учитывается при выделении.
(add-hook 'after-change-major-mode-hook
(lambda ()
(when (derived-mode-p 'prog-mode)
(let ((column-re (format "^[^n]\{%d\}\(.*\)$" fill-column)))
(font-lock-add-keywords nil
`((,column-re 1 font-lock-warning-face prepend)))))))
Возможно, вам не захочется снимать prog-mode
флажок, если вы хотите, чтобы это было включено и для текстовых файлов.