emacs - 如何调用编辑器到特定的行和相对于行的字符位置?
问题描述
我正在开发一个支持在 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 Editor 的行为符合预期,其中column
参数被解释为从line
. 请参阅下面关于 Emacs 的@Rorschach 的回答,我没有 Notepad++ 的解决方案。
解决方案
我为 Oxygen XML 编辑器工作,据我所知,Oxygen 将插入符号放置在该特定字符偏移处,因此我们在此上下文中不使用可视制表符宽度表示。您应该注意的一件事是,默认情况下,在 Oxygen 中,如果您按下“Tab”键,您实际上会插入 4 个空格,如果您想插入“Tab”字符,请在 Preferences->“Editor / Format”页面中是一个名为“Indent with tabs”的设置,需要检查。
推荐阅读
- c - JNIEnv->CallStaticObjectMethod 上的 SIGSEGV
- powershell - 如何使用 Powershell 根据文件名将文件移动到文件夹和子文件夹?
- python - 在 Django 中为单个产品创建页面
- r - R电报机器人命令
- html - iFrame URL 卡住了
- html - 为什么在尝试列出 rails 数组键的值时会出现 Cookie 溢出和 nil 参数?
- android - AOSP OTA - 使用较新版本更新系统应用程序不会覆盖以前安装的较旧的 apk 更新
- c# - 无法从程序集 Microsoft.Azure.Services.AppAuthentication 加载类型 Microsoft.Azure.Services.AppAuthentication.SqlAppAuthenticationProvider
- c++ - 是否允许不可访问的类型作为模板参数?
- web-scraping - 在伪元素之间抓取文本