Ich möchte nur prüfen, ob die aktuelle Zeile leer ist oder nicht (wenn sie nur Leerzeichen enthält, halte ich sie immer noch für leer).
Hier ist meine erste Version:
(defun strip-text-properties(txt)
(set-text-properties 0 (length txt) nil txt)
txt)
(defun is-current-line-empty ()
(interactive)
(setq c-line (thing-at-point 'line))
(string-match "^\s*$" (strip-text-properties c-line)))
Was ist der einfachste Weg, um zu überprüfen, ob die aktuelle Zeile leer ist?
whitespace
ChillarAnand
quelle
quelle
\s
entspricht das Schreiben dem Schreibens
. Vielleicht hast du gemeint"^\\s*$"
.\\s-
statt\\s
. Dieser Bindestrich wird in elisp regexp benötigt.Antworten:
Wäre so etwas "einfacher"?
quelle
Eine einfache Methode, die Ihren Vorstellungen nahe kommt:
quelle
match-data
.\\s-
statt haben\s
. Haben Sie diese Lösung ausprobiert?quelle
Ich schlage vor:
(Beachten Sie, dass die
progn
s in der Tat unnötig sind, da die Sprungfunktionen niemals nil zurückgeben). Wie Dan es in seiner Antwort tut,skip-syntax-*
könnte auch stattdessen verwendet werden.quelle
skip-syntax-*
ist der richtige Satz von Funktionen, um hier zu verwenden.Hier ist eine weitere einfache Lösung aus dem
comment-dwim-2
Paketquelle
Dies ist eine Modifikation der Antwort von PythonNut, die bei mir nicht funktioniert hat (warum?):
string-match-p
Gibt den Index der nächsten Zeile zurück, wenn die aktuelle Zeile nicht leer ist. Also habe ich überprüft, ob der Rückgabewert 0 ist.quelle
(thing-at-point 'line)
schließt den Zeilenumbruch am Ende der Zeile ein. Wenn die aktuelle Zeile nicht leer ist, stimmt der reguläre Ausdruck mit dieser neuen Zeile überein. Der einzige Zeitpunkt, an demstring-match-p
nil zurückgegeben wird, befindet sich in der letzten Zeile des Puffers (und Dario, Ihre Version funktioniert nicht in der letzten Zeile, wenn der Puffer nicht mit einer neuen Zeile endet).current-indentation
gibt der Spalte folgende führende Leerzeichen, die mit der Spalte am Zeilenende verglichen werden können:quelle