Wie man Separatoren in Wort machen
Jetzt hat Sie mir den Code :-) überprüfen
Hier ist der relevante Teil aus CharClassify.cxx Datei:
CharClassify nichtig :: SetDefaultCharClasses (bool includeWordClass) // alle char Klassen initialisieren auf Standardwerte
for (int ch = 0; ch < 256; ch++) if (ch == '\r' || ch == '\n')
charClass [ch] = ccNewLine;
else if (ch < 0x20 || ch == ' ')
charClass [ch] = ccSpace;
wenn sonst (includeWordClass - (ch> = 0x80 || isalnum (ch) || ch == '_'))
charClass [ch] = ccWord;
sonst
charClass [ch] = ccPunctuation;
>
>
CharClassify Leere :: SetCharClasses (const unsigned char Zeichen, cc newCharClass) // Übernehmen Sie die newCharClass den specifed Zeichen
if (Zeichen), während (Zeichen) charClass [* chars] = static_cast
Zeichen ++;
>
>
>
word_chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_"
für i im Bereich (129.257):
word_chars + = CHR (i)
editor.setWordChars (word_chars)
Code sollte ziemlich klar, ASCII Material sein (<128) goes into first line, this is what you should edit to set desired result. High values (>128) werden einfach in der Zeichenfolge angehängt. Sie können eine bessere Leistung in Python, wenn man list.append und string.join Methoden anstelle von String-Verkettung (besser noch sie ausführen nur einmal und Kopie in fest einprogrammiert Zeichenfolge führen, daher Schleife vollständig eliminiert), aber ich halte diese triviale Verstärkung sein wie dies läßt es so halten.
Ich habe eine Suche auf ‚setWhitespaceChars‘ und sie sagen, das darüber:
„Stellen Sie den Satz von Zeichen Leerzeichen bildet für beim Verschieben oder durch Wort auswählen. Sollte nach SetWordChars aufgerufen werden“
Ich fand auch, dass es ein getWhitespaceChars ist (), als auch so, um mit irgendetwas nicht zu verwirren, aber der $, wäre es nicht besser, so etwas zu tun:
white_chars = Editor.getWhitespaceChars ()
$ Von white_chars entfernen
Editor.setWhitespaceChars (white_chars)
Ich habe nur keine Ahnung, wie es zu schreiben, so dass Notepad ++ versteht. Oder wo es zu setzen, so dass Notepad ++ auf sie wirken. Ich bin ganz neu in Notepad ++ und normalerweise verwende ich C ++ Builder, ich nur Notepad ++ für PHP und XML.
P. S. Wie bekommt man diese Gray-Code-Boxen.
Dank sowohl CChris und Loreia
Freundliche Grüße
Asger-P
hier ist der Deal. Denken Sie an Notepad ++ als Wrapper um Scintilla-Bearbeitungskomponente. Das ist eine Vereinfachung, aber gut genug für das Gespräch. Scintilla arbeitet mit UTF-8-Strings. Also, Notepad ++ ist nicht gesetzt „WordChars“ direkt, sondern einfach SCI_SETCHARSDEFAULT zu Scintilla.dll sendet.
Dies ist der Code, der auf Scintilla Seite ausgeführt wird:
Fall SCI_SETCHARSDEFAULT:
pdoc-> SetDefaultCharClasses (true);
Unterbrechung;
was in der Tat führt dazu:
CharClassify Leere :: SetCharClasses (const unsigned char Zeichen, cc newCharClass) // Übernehmen Sie die newCharClass den specifed Zeichen
if (Zeichen), während (Zeichen) charClass [* chars] = static_cast
Zeichen ++;
>
>
>
Bevor wir zu Python wechseln, hier ist das, was SCI_SETWHITESPACECHARS tut:
So ist editor.setWhitespaceChars (white_chars) nutzlos für Sie, weil es nur Definition des Begriffs „Weißraum“ Zeichen setzen können, Sie Definition von „WordChars“ verlängern müssen. Grundsätzlich gibt es keine Möglichkeit, zu betrügen. Sie müssen absoluten Wert für „WordChars“ definieren. Sie können nicht Dinge aus Standarddefinition hinzufügen oder entfernen.
Und wir gehen zurück zu dem gleichen Python-Code:
Dieses Mal habe ich hinzugefügt Dollarzeichen auf der Liste. Kopieren Sie diese, führen Sie es aus, und es wird funktionieren (ich getestet etwas sehr ähnlich, es funktioniert :-))
Vor einiger Zeit hatte ich das ähnliche Problem und ich habe es nicht, indem das gelöst bekommen
Wort verkohlt während des Startvorgangs nur. Es war seltsam, es funktionierte, wenn der PHP-Skript war
bereits geöffnet (sagt, dass es als Datei bekannt wurde, die nach dem NPP startet automatisch geöffnet wurden), aber wenn ich einen neuen PHP-Skript geöffnet, hat es nicht funktioniert.
Meine Lösung ist ähnlich Loreias außer ich einen Rückruf registrieren, wenn
NPP ist bereit und Puffer aktiviert wird. By the way, gibt es einen kleinen Fehler
im Skript, muss es sein
so hier ist der Code meiner startup.py (user)
So ein neues Skript erstellen startup.py genannt, kopieren Sie den Code, stellen die
initialition atstartup, wie bereits von Loreia erklärt und neu gestartet NPP.
Seitdem - ich habe Problem nicht mehr. Btw. Frage / Problem bei dieser Lösung ist,
dass jeder Schalter eines Dokuments einen Puffer aktiviert Ereignis auslöst, aber wie schon gesagt,
dies war die einzige Art, wie ich um diese bekam könnte.
Rückrufe Mit nicht notwendig ist, glaube ich, Ihr Problem ist hier:
Ein solches Skript ist bereits vorhanden und es wird standardmäßig hier platziert (auf meinem Win 7-Maschine):
C: \ Program Files (x86) \ Notepad ++ \ Plugins \ Pythonscript \ scripts
Und nach dem Neustart, beinhaltet einen Doppelklick Dollarzeichen.
Können Sie die gleichen Schritte wiederholen und überprüfen, ob es für Sie arbeitet?
Hallo Loreia
Vielen Dank für die Zeit nehmen, zu helfen.
Ich habe den Code in meinem startup.py setzen, so dass es nun wie folgt aussieht:
In: Plugin -> Python Scripts -> Konfiguration Ich habe ATSTARTUP statt LAZY gewählt.
Ich bekomme immer noch nicht die in $ variable ausgewählt $ einzige Variable, wenn ich Sie auf das Wort verdoppeln. (Ich bin mit NPP Version 6.6.3).
Danke noch einmal
Freundliche Grüße
Asger
Sie haben Recht, es ist schon ein startup.py. Von dem, was ich verstehe, Dave eingeführt
ein „maschinenspezifische“ startup.py-Skript, das die von Ihnen beziehen und gab die
Benutzer die Möglichkeit, ihre eigenen startup.py zu erstellen. Dieses „benutzerspezifisch“ Skript, einmal
erstellt, befindet sich unter
Ich benutze diese Art und Weise, weil ich nicht mit Daves Skript zu verwirren wollte um und zusätzlich
Ich kann nicht sicher sein, dass es ändert sich zufrieden mit, sagen wir mal, das nächste Update.
Durch die Verwendung von Ihrem Weg, es funktioniert nur, wenn das PHP-Skript während automatisch geöffnet wird
NPP statup. Jedes Mal, wenn ich einen neuen PHP-Skript öffne, wird es wieder gebrochen.
Können Sie eine weitere Zeile zu Ihrem startup.py hinzufügen? Nur etwas, das „Ich bin am Leben Nachricht“, sagen so etwas wie dieses druckt:
Dann nach dem Neustart zu überprüfen, ob Sie die Nachricht in Pythonscript Konsole sehen können. Ich will einfach nur, um festzustellen, dass die richtige Skript ausgeführt wird.
Wenn es immer noch nicht funktioniert, können Sie ZIP-Version herunterladen und von dort versuchen? Auf diese Weise werden Sie mögliche Probleme in der aktuellen Konfigurationseinstellungen, sowohl im Plugin und Hauptanwendung beseitigen.
Ich sehe dies in meinem Konsolenfenster:
Aber als die erste Zeile. Es könnte sein, dass Claudia einen Punkt hat.
Aaaaah, tat nur erneut der Kontrolle, versuchte ich in einem $ Wort in der startup.py setzen und in dieser Datei der $ mit dem Wort ausgewählt wird, aber nicht in meinen PHP-Dateien.
Ist es in PHP-Dateien auf Ihrem Setup arbeiten?
Gibt es eine Möglichkeit, um dieses?
Danke fürs Helfen
Freundliche Grüße
Asger-P
Also, aus meiner Sicht sieht es aus wie scintilla / NPP ist das Wort, Zeichen zu schaffen, jedes Mal
muss ein Puffer aktiviert werden. Unfortunattely, die brillante Python-Skript-Schnittstelle
hat nicht die umgesetzt SCI_GETWORDCHARS sonst könnten wir leicht meine Vermutung beweisen.
Sie haben Recht, dieser Code einmal pro Puffer ausgeführt werden muss. Es ist nicht auf Anwendungsebene anwendbar, es nur aktive Puffer (geöffnete Datei) beeinflusst.
Also, Rückrufe sind der einzige Weg, es zu tun, wir müssen nur Benachrichtigungen finden, die alle Möglichkeiten abdecken, öffnen neue Dateien, öffnen Sie vorhandene Dateien und durch Hauptanwendung geöffnete Dateien nach einem Neustart.
Dann können wir Ihren Code wie folgt vereinfachen:
def extendWordChar (args):
word_chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_ $"
für i im Bereich (128.256):
word_chars + = CHR (i)
editor.setWordChars (word_chars)
notepad.callback (extendWordChar, [NOTIFICATION.NOTIFICATION1, NOTIFICATION.NOTIFICATION3, NOTIFICATION.NOTIFICATION3])
Btw. Vielen Dank für UDL2 - sehr gute Arbeit geleistet.
Es sieht aus wie BUFFERACTIVATE die einzige Lösung für dieses Problem ist. FileOpened arbeitet für Dateien, die nach Anwendung gestartet wird geöffnet, aber es sieht aus wie Notepad ++ lädt alte Dateien, bevor es initialisiert Pythonscript.
Das läßt BUFFERACTIVATE als die einzige sichere Art und Weise für jeden Puffer diese Nachricht an Scintilla zu senden.
Lange Rede kurzer Sinn, hier ist der Code, das funktioniert:
def extendWordChar (args):
word_chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_ $"
für i im Bereich (128.256):
word_chars + = CHR (i)
editor.setWordChars (word_chars)
notepad.callback (extendWordChar, [NOTIFICATION.BUFFERACTIVATED, NOTIFICATION.READY])
Ich bin nicht sicher, warum Sie NOTIFICATION.READY enthalten. Laut Dokumentation dieser Meldung auch dann nicht enthalten „bufferID“. Ich denke, das ein redundantes sein könnte. Kann einer von euch beiden Test obigen Code mit nur [NOTIFICATION.BUFFERACTIVATED]?
Ich denke, das sollte die letzte Version sein.
.
Btw. Vielen Dank für UDL2 - sehr gute Arbeit geleistet.
Bitte schön. Halten Sie ein Auge auf der nächsten Version, sollte es in diesem Jahr bereit letztere sein. UDL 3.0 wird viel verbessert werden. In der Tat, warum der einzige Grund, warum ich diesen Thread auffiel, war, weil ich auf das Hinzufügen dieser gleiche Funktionalität in neue UDL arbeitete. Mit UDL 3.0 wird dieser Thread obsolet :-) geworden
wir müssen die READY-Benachrichtigung für nur einen Fall, und das ist, wenn der PHP-Skript das letzte aktive Dokument vor NPP nahe war. Beim nächsten Systemstart ist das PHP-Dokument der aktiven
aber wir bekommen nur ein READY Ereignis und keine BUFFERACTIVATED Ereignis.
Ich bekomme es jetzt, danke.
Dieser Thread könnte veralten, aber jetzt ist es ein Faden aus Gold.
Ich bin damit einverstanden tatsächlich, es hat mir geholfen, einige Dinge. Ich weis das zu schätzen.
Das nächste, was wäre es pro Dateityp zu machen .;)
Dateitypprüfung in Python ist wirklich einfach. Um ehrlich zu sein, alles ist einfach in Python :-)
def extendWordChar (args):
wenn "bufferID" in args:
Dateiname, extension = os.path.splitext (notepad.getBufferFilename (args [ "bufferID"]))
wenn nicht in Verlängerung ( "PHP", "txt", "xyz"):
Rückkehr
word_chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_ $"
für i im Bereich (128.256):
word_chars + = CHR (i)
editor.setWordChars (word_chars)
notepad.callback (extendWordChar, [NOTIFICATION.BUFFERACTIVATED, NOTIFICATION.READY])
Ist das, was Sie im Sinn hatte?