Підрахунок кількості рядків у Sublime Text (Плагін)

Маніпуляція з текстом/кодом дуже часта штука. Для ефективної роботи потрібно мати хороший набір інструментів. У моєму toolboxі є один кльовий редактор: Sublime. Він використовується суто для маніпуляцій з текстом. Зміна великих кусків, заміна по регулярним виразам, сортування рядків і інше. Останнім часом мені потрібен був ось який функціонал: порахувати кількість рядків. Якщо ви знаєте php функці array_count_values - ви мене зрозумієте. Для цих задач я вирішив написати плагін. Як його встановити та як використовувати - читайте дальше.

Інструкція:

  1. Створіть папку ~/.config/sublime-text-3/Packages/CalculateLines
  2. Створіть файл у цій папці CalculateLines.py і вставте код, який наведений нижче
  3. Відкрийте sublime, Знайдіть пункт меню Preferences -> Key Bindings User
  4. Додайте гарячу клавішу, яка буде викликати відповідний action (calculate_lines)
  {
    "keys": [
      "ctrl+shift+i"
    ],
    "command": "calculate_lines"
  }

Створюємо будь який файл і просто набиваємо даними, Викликаємо наш екшин через гарячу клавішу. Все готово. Якщо є якісь питання - пишіть, відповім усім Код на github https://gist.github.com/funivan/5f110c7eb8d30ceed990

import sublime, sublime_plugin

class CalculateLinesCommand(sublime_plugin.TextCommand):
  def run(self, edit):
    lines={}
    region = sublime.Region(0, self.view.size())

    for lineRegion in self.view.lines(region):  
        key = self.view.substr(lineRegion)
        key = key.strip(' \t\n\r')

        if len(key) == 0 :
          continue

        i=0
        if key in lines:
          i=lines[key]
        i=i+1
        lines[key]=i

    sorted_names = sorted(lines, key=lines.__getitem__, reverse=True)
    index=0
    self.view.erase(edit, region);
    for k in sorted_names:
      a="{} => {}\n".format(lines[k], k)
      self.view.insert(edit, index, a)
      index=index + len(a);

Відео, яке показує роботу плагіну