Sublimetext3 升华在哪里存储上一个打开文件的最后一个光标位置?

Sublimetext3 升华在哪里存储上一个打开文件的最后一个光标位置?,sublimetext3,sublimetext,Sublimetext3,Sublimetext,我想在Sublime编辑器中导出最后打开的文件(选项卡)列表和每个文件的最后一个光标位置。我可以轻松解析名为session.sublime\u session的会话文件,该文件位于安装子路径:/Data/Local/(在Windows中),以获取文件名。但在该文件中,没有明显的行号。还是我错过了什么 最后一个光标位置存储在哪里? 更新 我现在看到它存储在名为selection的JSON字段中,并按缓冲区中的字符数进行计数 ... "selection": [ [

我想在Sublime编辑器中导出最后打开的文件(选项卡)列表和每个文件的最后一个光标位置。我可以轻松解析名为
session.sublime\u session
的会话文件,该文件位于安装子路径:
/Data/Local/
(在Windows中),以获取文件名。但在该文件中,没有明显的行号。还是我错过了什么

最后一个光标位置存储在哪里?


更新

我现在看到它存储在名为selection的JSON字段中,并按缓冲区中的字符数进行计数

...
"selection":
    [
        [
            4353,
            4353
        ]
    ],
...
现在的问题是,我怎样才能从中计算出行号


可能通过编写一个正则表达式,在读取X字节数后计算下线(
\n
s)。(如果使用不同的EOL或usinf UTF-8与ASCII会怎样?

在Sublime中,选择被表示为
区域
类的实例列表,该类本质上是文件中的一对文件偏移量。特别是,每个数字都是自文件开始以来的字符数,因此第一个字符位于位置
0
,第二个字符位于位置
1
,依此类推

选择范围始终从第一个值到第二个值;如果两个值相同,则选择仅为常规插入符号(即无可见选择);否则,选择所涵盖的字符范围。第二个数字也可能小于第一个数字,这意味着选择是“向后的”。在所有情况下,第二个值都是该选择当前插入符号所在的位置

这里的重要区别是偏移量是在字符中的;无论基础文本的编码是每个字符一个字节、每个字符两个字节,或者甚至是UTF-8之类的东西(某些字符需要多个字节进行编码),位置总是用字符表示

要记住的另一件重要事情是,可能存在不同类型的线终止;特别是Linux使用换行符,而Windows使用回车符+换行符(2个字符)的组合。不管文件中的行终止符是什么,为了保持一致性,升华总是将每行终止符标准化为一个字符(例如,插件不需要在意)

因此,为了将字符位置转换为行/列,您需要知道文件的编码和行终止符类型,以便正确解释字符,然后逐个计算源数据中的字符,行号增加1(并将列重置为0)每次你遇到一个行终止符

一般来说,API中的
view.rowcol()
方法就是这样做的;例如,内部实现最有可能利用具有基于存储器中的数据结构的预计算行信息


上面提到的所有课程的信息都可以在Sublime中找到。在问题答案的帮助下,我成功地拼凑出了一些效果不错的东西。但它同时依赖于jq(适用于windows)和Bash(Cygwin)

jq-win64.exe-r'.windows[]|.groups[].sheets[]|“\(.file):\(.settings.selection[0][0])“'Session.sublime|u Session | sort | sed's/^\/./\/cygdrive\L&\E/'
然后,我以此为基础提取EOL的数量,并以此来确定每个文件的确切光标行号

提示:使用
head-c | wc-l