我正在开发一个应用程序,该应用程序支持对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
(见下面罗夏的答案,了解有效的方法(
对于Notepad++和Emacs,是否存在将光标放置在相对于行的字符位置的命令行调用?
编辑
Oxygen XML编辑器的行为与预期一致,其中column
参数表示为从line
开始的字符偏移量。请参阅下面@Rorschach关于Emacs的回答,我没有Notepad++的解决方案。
作为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
我在Oxygen XML Editor工作,据我所知,Oxygen将插入符号放在特定的字符偏移量处,因此我们在本文中不使用可视化制表符宽度表示。你应该知道的一件事是,在氧气中,默认情况下;选项卡";键实际插入4个空格;选项卡";字符,在"首选项"中->quot;编辑器/格式";页面上有一个名为";用制表符缩进";这需要检查。