我正在为emacs中的移动定义新的键绑定。我想将M-n绑定到下一行,但我也发现了next-logical-line,它似乎做了同样的事情。
我知道下一行会向下移动一行。 next-logical-line有什么作用?
你能给出一个例子,其中2个命令可以做不同的事情吗?
答案 0 :(得分:1)
来自Emacs帮助(C-h a next-logical-line
):
next-logical-line是一个交互式编译的Lisp函数 “simple.el”。
(next-logical-line& optional ARG TRY-VSCROLL)
将光标垂直向下移动到ARG线。这与之相同 'next-line',除了它总是按逻辑行而不是 视线,忽略变量'line-move-visual'的值。
逻辑行是基于newline
字符分隔的行。或者换句话说,逻辑线基于文本而不是显示。
答案 1 :(得分:0)
https://github.com/emacs-mirror/emacs/blob/f069ea4f84a94bfbbd444073729f81fdd27c9445/lisp/simple.el#L5853是next-line()的来源。
docstring包含以下文本:
如果变量'line-move-visual'为非零,则此命令移动 显示行。否则,它会通过缓冲线移动而不需要 可变宽度字符或连续行。见M-x 始终按缓冲行移动的命令的next-logical-line。
https://github.com/emacs-mirror/emacs/blob/f069ea4f84a94bfbbd444073729f81fdd27c9445/lisp/simple.el#L6767是next-logical-line()
的来源next-logical-line的实现是:
(defun next-logical-line (&optional arg try-vscroll)
"Move cursor vertically down ARG lines.
This is identical to `next-line', except that it always moves
by logical lines instead of visual lines, ignoring the value of
the variable `line-move-visual'."
(interactive "^p\np")
(let ((line-move-visual nil))
(with-no-warnings
(next-line arg try-vscroll))))
我们可以看到next-logical-line
是使用next-line
实现的,但line-move-visual
设置为nil。默认情况下,此变量设置为t:
$ emacs -Q --batch --eval '(message "%s" line-move-visual)' t