如何调用编辑器来指定行和字符相对于行的位置



我正在开发一个应用程序,该应用程序支持对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;编辑器/格式";页面上有一个名为";用制表符缩进";这需要检查。

最新更新