微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我正在开发一个应用程序,该应用程序支持针对 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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?