[PYTHON] Migemo-Version des Befehls: find,: mfind

Der grundlegende Teil ist: Finden, wie es ist.

Natürlich benötigen Sie den Befehl cmigemo und sein Wörterbuch (Ich denke, es wird kommen, wenn Sie cmigemo setzen)

Zuerst habe ich versucht, PyMigemo zu verwenden, aber ich kann es nicht mit Python3 installieren, und es scheint schwierig für mich zu sein, der Python nicht kennt. Ich starte heimlich den Befehl cmigemo mit popen und benutze ihn.

In rc.conf

rc.conf


map f console mfind 

Es wird bequem sein, es zu tun. (Vergessen Sie nicht, am Ende der Zeile ein Leerzeichen zu setzen!)

commands.py


# Copyright (C) 2012 anekos
# Copyright (C) 2009, 2010, 2011 Roman Zimbelmann <[email protected]>
# This configuration file is licensed under the same terms as ranger.
#
# ranger - http://ranger.nongnu.org/

class mfind(Command):
  """
:mfind <EXPR{2,}>

Migemized find.
"""

  tab = Command._tab_directory_content
  last_rexpr = None
  migemo = None

  def get_instance (self):
    if not self.migemo:
      from subprocess import Popen, PIPE
      self.migemo = Popen(["cmigemo", "-q", "-d", "/usr/share/migemo/utf-8/migemo-dict"], stdout=PIPE, stdin=PIPE)
    return self.migemo

  def get_rexpr (self, expr):
    if not expr or len(expr) <= 1:
      return None

    m = self.get_instance()
    m.stdin.write(bytearray(expr + "\n", "UTF-8"))

    migemo_result = str(m.stdout.readline(), "UTF-8").rstrip()
    try:
      import re
      return re.compile(migemo_result, re.L | re.U | re.I)
    except:
      return None

  def execute (self):
    if self.quick():
      self.fm.move(right=1)
      self.fm.block_input(0.5)
    else:
      self.fm.cd(self.rest(1))

    # for n/N (search_next)
    if self.last_rexpr:
      self.fm.thistab.last_search = self.last_rexpr
      self.fm.search_method = 'search'

  def quick(self):
    cwd = self.fm.thisdir
    arg = self.rest(1)
    if not arg:
      return False

    if arg == '.':
      return False
    if arg == '..':
      return True

    rexpr = self.get_rexpr(arg)
    self.last_rexpr = rexpr

    if not rexpr:
      return False

    count = 0
    deq = deque(cwd.files)
    deq.rotate(-cwd.pointer)
    i = 0
    for fsobj in deq:
      from re import search
      if search(rexpr, fsobj.basename):
        count += 1
        if count == 1:
          cwd.move(to=(cwd.pointer + i) % len(cwd.files))
          self.fm.thisfile = cwd.pointed_obj
      if count > 1:
        return False
      i += 1

    return count == 1

Recommended Posts

Migemo-Version des Befehls: find,: mfind
Richten Sie die Version von chromedriver_binary aus
Öffnen Sie die Chrome-Version von LINE über die Befehlszeile [Linux].
Finden Sie die Version der Sprache heraus, die Sie ausführen
Testen Sie die Version des Argparse-Moduls
Finden Sie die Definition des Wertes von errno
Erhöhen Sie die Version von pyenv selbst
pyenv-change die Python-Version von virtualenv
Suchen Sie den Bereich des Summensatzes überlappender Rechtecke
So überprüfen Sie die Version von Django
Informationen zur virtuellen Umgebung von Python Version 3.7
[Python] Probieren Sie pydash der Python-Version von lodash aus
Beachten Sie den Abschluss eines zeitaufwändigen Befehls
Finden Sie den Koeffizienten des Polypolys mit dem kleinsten Quadrat
Test von emacs-org parser orgparse für Python
So finden Sie den Bereich des Boronoi-Diagramms
Die Hand von "Millijan" durch Kombinationsoptimierung finden
Die Geschichte der Herstellung des Mel Icon Generator Version 2
Verwenden Sie die neueste Version von PyCharm unter Ubuntu
Schreiben Sie eine Notiz über die Python-Version von Python Virtualenv
Finden Sie den Bruchteil des in Python eingegebenen Werts heraus
Probieren Sie Progate Free Edition [Python I]
Die Geschichte des Fehlinterpretierens der Swap-Zeile des obersten Befehls
Finden Sie die Lösung der Gleichung n-ter Ordnung mit Python
Finden Sie den Tag nach Datum / Uhrzeit heraus
Sortieren Sie die aktualisierten Dateien innerhalb des durch den Befehl find angegebenen Zeitraums in der Reihenfolge ihrer Größe
Finden Sie die kumulative Verteilungsfunktion durch Sortieren (Python-Version)
Scraping Community Cycle Nutzungsverlauf PhantomJS-Version
Zeigen Sie nach und nach die Ausgabe des Befehls an, der von subprocess.Popen ausgeführt wird
Installieren Sie die neueste Version von CMake unter Ubuntu 18.04.4 LTS
Projecet Euler 12 Ermitteln Sie die Anzahl der Brüche ohne Division.
Die Geschichte des Stoppens des Produktionsdienstes mit dem Befehl hostname
Berechnen Sie die Summe der eindeutigen Werte durch Pandas-Kreuztabellen
Kennen Sie den Speicherort der Python-Klassendefinitionsdatei.
Lassen Sie uns jetzt die Mehrdeutigkeit des Bindestrichs (-) des Befehls su beseitigen! !!
Ich verfolgte die Implementierung des Befehls du (erste Hälfte)
Finden Sie den Speicherort der mit pip installierten Pakete heraus
Verwenden wir die Python-Version des Confluence-API-Moduls.
[Django] Ändern Sie die Standard-IP-Adresse des Befehls runserver
Verwalten Sie die Paketversionsnummer von require.txt mit pip-tools
Die neueste Version von Pillow 7.0.0 wird die Transformation von Pytorch beenden.
Überprüfen Sie den Linux-Verteilungstyp und die Version
Verstehen Sie die Attribute von Linux-Dateien (Befehl ls -l)
Der Beginn von cif2cell
Memorandum of vi Befehl
Holen Sie sich die GNOME-Version
Die Bedeutung des Selbst
Installation von OpenMDAO (Version 1.7.1)
Befehl zur Bestätigung der CentOS-Version
der Zen von Python
Die Geschichte von sys.path.append ()
Über den Servicebefehl
Installieren Sie den Befehl pip
Suchen, suchen Sie die Befehlsübersicht
Rache der Typen: Rache der Typen
Übergeben des Ausführungsergebnisses eines Shell-Befehls in einer Liste in Python (nicht blockierende Version)
Hinweis zur Version von CUDA, cuDNN, in der Tensorflow-GPU funktioniert hat
Ich habe versucht, die Entropie des Bildes mit Python zu finden