(defun smart-beginning-of-line ()
"Move point to first non-whitespace character or beginning-of-line.
Move point to the first non-whitespace character on this line.
If point was already at that position, move point to beginning of line."
(interactive "^") ; Use (interactive) in Emacs 22 or older
(let ((oldpos (point)))
(back-to-indentation)
(and (= oldpos (point))
(beginning-of-line))))
(global-set-key [home] 'smart-beginning-of-line)
Я не совсем уверен, что сделает умный конец. У вас обычно есть много пробелов?
Примечание: Основное отличие этой функции от функции Роберта Вуковича состоит в том, что он всегда перемещается к первому непустому символу при первом нажатии клавиши, даже если курсор уже был там. В этом случае мой переместится в столбец 0.
Также он использовал (beginning-of-line-text)
, где я использовал (back-to-indentation)
. Они очень похожи, но между ними есть некоторые различия. (back-to-indentation)
всегда перемещается к первому непробельному символу в строке. (beginning-of-line-text)
иногда проходит мимо непробельных символов, которые он считает незначительными. Например, в строке только для комментариев он перемещается к первому символу текста комментария, а не к маркеру комментария. Но любая из функций может использоваться в любом из наших ответов, в зависимости от того, какое поведение вы предпочитаете.