如何将编辑器调用到特定行和相对于该行的字符位置?

How to invoke an editor to specific line and character position relative to the line?

我正在开发一个支持在 XML 验证错误时启动外部编辑器的应用程序,其中验证错误将包括特定行和发生错误的行中的字符偏移量。例如,"74:62"表示第74行和该行的第62个字符,也可以表示为"第74行,第62列"。

我遇到的问题是编辑们对待“专栏”的方式不同。对于Vim,第62列是一个字符位置。在 Oxygen XML 编辑器、Notepad++ 和 Emacs 中,列是渲染位置。

为什么这种区分很重要?如果目标行有制表符,Notepad++ 和 Emacs 的“列”不再表示字符偏移量,并且对于这些编辑器,光标的位置不同:Notepad++ 将制表符视为 4 列,而 Emacs 将其视为 8 列(默认情况下)。

以下是我对每个编辑器使用的命令,其中 'L' 是行号,'C' 是列号,'FILE' 是要打开的文件:

对于 Notepad++ 和 Emacs,是否有命令行调用将光标放置在相对于该行的字符位置?

编辑

Oxygen XML 编辑器按预期运行,其中 column 参数被解释为距 line 的字符偏移量。请参阅下面@Rorschach 关于 Emacs 的回答,我没有 Notepad++ 的解决方案。

我在 Oxygen XML Editor 工作,据我所知,Oxygen 将插入符号置于特定字符偏移处,因此我们在此上下文中不对任何内容使用视觉制表符宽度表示。 您应该注意的一件事是,在 Oxygen 中,默认情况下,如果您按“Tab”键,您实际上会插入 4 个空格,如果您想插入“Tab”字符,请在 Preferences->“Editor / Format”页面中是需要检查的名为“Indent with tabs”的设置。

作为 emacs 中不同字符显示宽度的解决方法,您可以在文件加载后向 运行 添加一个挂钩。

# assuming there are some variables (eg. shell) 
# holding the line/column as in the normal command
L=4
C=2
emacs --eval "(add-hook 'emacs-startup-hook (lambda () (goto-line $L) (forward-char $C)))" input_file.xml