崇高3;当行终止中存在CR和LF时,如何准确计算字符数

时间:2015-06-12 21:15:19

标签: sublimetext3 sublimetext

编辑文本文件时,Sublime 3中的默认字符计数功能将换行计为一个字符,无论该行是以LF还是CR结尾,LF。我找不到一个设置来为我提供CR,LF行结尾的文本文件的正确计数。

我已尝试安装WordCount软件包,但它有同样的问题。设置首选项

char_ignore_whitespace : true

不会改变行为。

有人可能认为Sublime的行为不正确,因为(对于我正在使用的文件)换行符构成两个字符,而不是一个。

我希望计数在字符数中包含CR(即换行符是2个字符)的原因是我可以使用Sublime来帮助调试使用ftell / fseek的一些代码。就目前而言,我必须继续将行数添加到字符数中,以便在文件中获得正确的字节位置(当选择从文件开头到感兴趣点的所有文本时)。

我缺少一个设置吗?是否有可以使用的不同包?

编辑:我注意到Notepad ++正确报告了这些文件的字符数,但我更喜欢使用Sublime:)

EDIT2:我发现这里的一些代码(Is it possible to show the exact position in Sublime Text 2?)在Sublime 3中有效,但也错误地计算了两个字符的换行符。

1 个答案:

答案 0 :(得分:1)

我修改了上面链接中的代码,粗略地补偿了缺失的行尾计数。下面的代码只是将行数(从零开始)添加到字符位置,并将其显示为替代位置(如果unix样式文件打开,在这种情况下不需要补偿)。

这无疑是粗糙的,并且不够智能,无法确定文件结尾的行类型。也许别人有更好的主意?

import sublime, sublime_plugin

class PositionListener(sublime_plugin.EventListener):
  def on_selection_modified(self,view):
    text = "Position: "
    sels = view.sel()
    for s in sels:
        if s.empty():
            row, col = view.rowcol(s.begin())
            text += str(s.begin())
            text += " [" + str(s.begin() + row) + "]"
        else:
            text += str(s.begin()) + "-" + str(s.end())
            row, col = view.rowcol(s.begin())
            text += " [" + str(s.begin() + row) + "-"
            row, col = view.rowcol(s.end())
            text += str(s.end() + row) + "]"
    view.set_status('exact_pos', text)