如何解决如何调用编辑器到特定的行和相对于该行的字符位置?
我正在开发一个应用程序,该应用程序支持针对 XML 验证错误启动外部编辑器的功能,其中验证错误将包括发生错误的行中的特定行和字符偏移。例如,“74:62”表示该行的第 74 行和第 62 个字符,也称为“第 74 行,第 62 列”。
我遇到的问题是编辑对“列”的处理方式不同。对于 Vim,第 62 列是字符位置。而在 Oxygen XML Editor、Notepad++ 和 Emacs 中,列是渲染位置。
为什么这种区别很重要?如果目标行有制表符,Notepad++ 和 Emacs 的“列”不再表示字符偏移,并且对于这些编辑器,光标的位置不同:Notepad++ 将制表符视为 4 列,而 Emacs 视为 8 列(默认情况下)。
以下是我为每个编辑器使用的命令,其中“L”是行号,“C”是列号,“FILE”是要打开的文件:
gvim "+call cursor(L,C)" FILE
oxygen FILE#line=L;column=C
notepad++ -nL -cC -lxml FILE
-
emacs +L:C FILE
(有关有效方法,请参阅下面@Rorschach 的回答)
对于 Notepad++ 和 Emacs,是否有命令行调用将光标置于相对于行的字符位置?
编辑
Oxygen XML 编辑器的行为符合预期,其中 column
参数被解释为与 line
的字符偏移量。请参阅下面关于 Emacs 的@Rorschach 的回答,我没有 Notepad++ 的解决方案。
解决方法
我为 Oxygen XML 编辑器工作,据我所知,Oxygen 将插入符号放置在该特定字符偏移处,因此在此上下文中我们不使用可视化选项卡宽度表示。 您应该注意的一件事是,默认情况下,在 Oxygen 中,如果您按下“Tab”键,您实际上会插入 4 个空格,如果您想插入“Tab”字符,请在“首选项”->“编辑器/格式”页面中是一个名为“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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。