Wie erstelle ich in Xcode 8 eine Tastenkombination zum Löschen von Zeilen? Die Xcode 3-Lösungen funktionieren nicht mehr

79

In früheren Versionen war Xcodees möglich, eine Schlüsselbindung zum Löschen der aktuellen Zeile zu erstellen. Es gab verschiedene Lösungen und sie werden zum Beispiel hier beschrieben:

Xcode: Leitungs-Hotkey löschen

Xcode-Zeile duplizieren / löschen

http://bigdiver.wordpress.com/2009/09/11/configure-homeend-key-bidings-on-mac-os-x/

http://www.betadesigns.co.uk/Blog/2010/02/03/custom-xcode-shortcuts/

Alle Lösungen umfassen das Ändern einer dieser Dateien:

~ / Bibliothek / Anwendungsunterstützung / Xcode / Schlüsselbindungen / *. Pbxkeys
~ / Bibliothek / Schlüsselbindungen / DefaultKeyBinding.dict
~ / Bibliothek / Schlüsselbindungen / PBKeyBinding.dict

Eine gute Ressource für die vorhandenen Verknüpfungen in Xcode 4ist http://cocoasamurai.blogspot.com/2011/03/xcode-4-keyboard-shortcuts-now.html . Es sind viele zum Löschen aufgeführt, aber keine für "Zeile löschen".

ABER diese Lösungen funktionieren seitdem NICHT mehr Xcode 4.

Update : Problem ist immer noch das gleiche wie abXcode 5.1.1

Update : Problem ist immer noch das gleiche wie abXcode 6.1 GM Seed 2

Update : Gilt weiterhin für Xcode Version 7.3 (7D175) ab dem 26. April 2016

Update : Sechs Jahre später verfügt Xcode 8.3 über eine integrierte Lösung. Siehe Antwort unten.

Klaas
quelle
In der Zwischenzeit habe ich beschlossen, ein Tastaturmakro mit keyboardmaestro.com zu erstellen .
Klaas
Ich denke, es gibt einige Lösungen unten aufgeführt. Ich persönlich verwende ein Keyboard Maestro-Makro.
Klaas

Antworten:

70

Es sieht so aus, als hätte Xcode 8.3 endlich den Befehl Zeile löschen hinzugefügt :)

Standardmäßig ist keine Tastenkombination zugewiesen, daher müssen Sie selbst eine hinzufügen in:

  1. Öffnen Sie Xcode > Einstellungen > Tastenkombinationen
  2. Suchen nach Delete Line
  3. Fügen Sie in der Spalte Taste eine Tastenkombination hinzu

Xcode-Schlüsselbindungen

Paulo Mattos
quelle
1
BEEINDRUCKEND! Schöner Fang! Ich hätte nie gedacht, dass dies jemals passieren würde!
Klaas
Hat jemand herausgefunden, was sich sonst noch geändert haben könnte?
Klaas
1
@Klaas ich auch Mann, hätte nie gedacht, würde das sehen! Ich habe einen Unterschied zwischen Xcode 8.2.1- und Xcode 8.3.2- IDETextKeyBindingSet.plistDateien ausgeführt und die einzige festgestellte Änderung war dieser Befehl zum Löschen der Zeile oben :(
Paulo Mattos
@FelixTurner Hast du es schon mit dem neuen Xcode Beta 2 versucht ?
Paulo Mattos
3
Ich habe in Xocde 9 Beta eine Problemumgehung gefunden . Bitte beachten Sie die meine Antwort unten. stackoverflow.com/a/45868495/1287336
Wooseong Kim
94

Nach langem Suchen hier und da kam ich zu folgender Lösung:

Halten Sie die controlTaste gedrückt und drücken Sie dann AKK.

(Hinweis: Sekunde Klöscht die leere Zeile).

Eigentlich ist es eine Kombination aus zwei Befehlen: Move to Beginning of Paragraph& Delete to End of Paragraph. Sie können auch andere Schlüssel verwenden / setzen und Schlüsselbindungen für andere Befehle verwenden / setzen / ändern, z . B. Move to Beginning of Line& Delete to End of Line. Ich habe die oben genannten (Standard-) Tastenkombinationen verwendet, wie sie zu mir passen.

Bearbeiten:

Um mehr als eine aufeinanderfolgende Zeile zu löschen , halten Sie zuerst die controlTaste gedrückt und drücken Sie dann A(nur um zum Anfang des Absatzes / der Zeile zu gelangen). Halten Sie dann gedrückt, Kbis alle Zeilen gelöscht sind (dies würde funktionieren, wenn der Cursor auf bleibt der Anfang).

Nur Aufgabe leicht zu machen (für mich), ich habe eingestellt commandDfür Delete to End of Paragraphund home/ endbis Anfang / Ende des Absatzes zu gehen.

Vasu
quelle
2
Gute Lösung, aber ich suche wirklich nach einer einzigen Verknüpfung. Wenn ich beispielsweise 5 Zeilen in TextWrangler löschen möchte, wird nur fünfmal cmd-d gedrückt. Seltsamerweise wird cmd-d in Xcode nicht verwendet ...
Klaas
@Klaas, siehe meine aktualisierte Antwort. Es ist möglicherweise nicht das, was Sie erwarten, dennoch ist es eine gute Lösung.
Vasu
Sobald Ihre Antwort einige positive Stimmen erhält, werde ich sie akzeptieren, da Xcode 4 dies nicht in Kürze enthalten wird.
Klaas
13
schlechteste IDE aller Zeiten.
Kozla13
xCode ist schrecklich! - Android-Entwickler mit Android Studio.
M'hamed
59

Ich habs! Dies funktioniert in XCode 4.3 bis 4.5 und erfordert keine zusätzlichen Anwendungen und ist XCode-spezifisch.

Diese Lösung entspricht im Wesentlichen dem hier beschriebenen Befehl "Zeile duplizieren" :

Bearbeiten Sie die Plist-Datei

Es befindet sich unter /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources/IDETextKeyBindingSet.plist

Beachten Sie, dass:

  • Die verknüpfte Antwort schlägt vor, XCode dafür zu verwenden, aber ich finde, dass dies XCode zum Absturz bringt
  • Dieser Pfad ist für Lion - er kann für andere Betriebssystemversionen variieren
  • Möglicherweise müssen Sie die Berechtigungen sudo oder ändern, um diese Datei zu bearbeiten
  • Schließen Sie XCode vor dem Bearbeiten

Fügen Sie ein neues <dict>Element hinzu

Fügen Sie diesen Text direkt über dem Ende <dict>am Ende dieser Datei hinzu

    <key>Custom</key>
    <dict>
      <key>Delete Current Line In One Hit</key>
      <string>moveToEndOfLine:, deleteToBeginningOfLine:, deleteToEndOfParagraph:</string> 
    </dict>

Beachten Sie, dass:

  • Dies ist innerhalb des Bestehenden, <dict>also gibt es ein </dict></plist>danach
  • Dadurch wird die benannte Aktion "Aktuelle Zeile in einem Treffer löschen" den drei Schlüsselaktionen in der Zeichenfolge zugeordnet. Ich habe hier mit verschiedenen Optionen herumgespielt, um die richtige Kombination zu erhalten. Wenn Sie beispielsweise moveToBeginningOfLine versuchen, deleteToEndOfLine anstelle von umgekehrt, werden bei Verwendung in leeren Zeilen die Zeile und die gesamte nächste Zeile gelöscht . Welches ist unangenehm

Speichern Sie diese und öffnen Sie XCode

Fügen Sie eine neue Schlüsselbindung in XCode hinzu

Sehen Sie sich dazu die Screenshots in der verknüpften Antwort an oder tun Sie dies:

  1. Öffnen Sie die XCode-Einstellungen
  2. Wählen Sie Tastenkombinationen
  3. Klicken Sie auf Alle
  4. Geben Sie im Feld SEarch "Löschen" ein und suchen Sie nach "Aktuelle Zeile mit einem Treffer löschen".
  5. Fügen Sie Ihre neue Bindung hinzu.

Dies sollte es bis auf eine Einschränkung tun. Ich konnte XCode niemals dazu bringen , die neue Bindung zu speichern . Das gleiche Problem wird hier beschrieben , obwohl meine Problemumgehung eine geringfügige Abweichung aufwies:

  1. Erstellen Sie ein Duplikat der Standardbindungen (klicken Sie auf die Schaltfläche + unten links im Fenster "Bindungen" und erstellen Sie ein Duplikat).
  2. Setzen Sie die neue Bindung im Duplikat
  3. Schließen Sie den Einstellungsdialog (das ist die Variante!)
  4. Öffnen Sie die Einstellungen erneut und erstellen Sie ein neues Duplikat des alten Duplikats und löschen Sie das alte Duplikat.

Was für ein Rigmarole? Aber es funktioniert. Jetzt habe ich Strg + D zugeordnet, um die gesamte aktuelle Zeile in XCode 4.3 auf Lion zu löschen.

Rhabarber
quelle
Update: Eine Einschränkung, die mich bei dieser Lösung irritiert, besteht darin, dass jeweils nur eine Zeile gelöscht wird, selbst wenn Sie eine ganze Menge ausgewählt haben. Meine natürliche Tendenz ist es, 3 Zeilen auszuwählen und Strg + D zu drücken und alle zu löschen - aber das tut es nicht.
Rhabarber
Beachten Sie, dass bei der Installation einer neuen Version von XCode diese nicht beibehalten wird, während Ihre üblichen Anpassungen für die Schlüsselbindung dies tun. (Ich "aktualisiere", indem ich die alte XCode.app umbenenne und die neue neu installiere). Die eigentlichen Schlüsselbindungen befinden sich in ~ / Library ... also bleiben sie erhalten, aber dieser neue Eintrag ist nicht
Rhabarber
Ja, es funktioniert in Xcode 5 und speichert die Schlüsselbindung, so dass andere möglicherweise glauben, dass sich die Mühe lohnt :)
RedYeti
@Rhubarb Um mehrere Zeilen gleichzeitig zu löschen, indem Sie Text in diesen Zeilen ausgewählt und nur die Verknüpfung gedrückt haben, fügen Sie einfach ein delete:vor der Befehlssequenz hinzu : delete:, moveToEndOfLine:, deleteToBeginningOfLine:, deleteToEndOfParagraph:. Wäre toll, wenn Sie dies in Ihrer Antwort bearbeiten.
LopSae
2
Dies funktioniert in Xcode 6.2 (6C86e), und ich brauchte auch keine Problemumgehung, damit Xcode die Schlüsselbindung "speichert". Yay! :)
Will Hains
16

Ich habe eine vorübergehende Problemumgehung für Xcode 9 gefunden .

Öffnen Sie die Datei Xcode / Content / Frameworks / IDEKit.framework / Resources / IDETextK‌ eyBindingSet.plist und fügen Sie die folgenden Zeilen hinzu.

Es ahmt die Aktion nach, die in Xcode 8 mit eingeschränkter Unterstützung ausgeführt wird. Es kann nur eine Zeile entfernen, aber ich bin irgendwie zufrieden. Ich hoffe das wird bald behoben.

<key>Customized</key>
<dict>
    <key>Delete Line</key>
    <string>moveToBeginningOfLine:, deleteToEndOfLine:, moveDown:, deleteBackward:</string>
</dict>

Nach dem Neustart von Xcode sehen Sie das benutzerdefinierte Element Key Bindingswie folgt .

Geben Sie hier die Bildbeschreibung ein

Binden und benutzen!

Bearbeiten) Ich denke unten ist besser als das Original.

<string>moveToEndOfLine:, deleteToBeginningOfLine:, deleteToEndOfParagraph:</string>
Wooseong Kim
quelle
2
Xcode 9 richtige Antwort hier. Es funktioniert Xcode 9 Version 9.0 (9A235)
Uspython
Warum ist das in Xcode 9 kaputt gegangen? Das hat bei mir irgendwie funktioniert. Ich musste den Wert für den vorhandenen Wert für die Zeichenfolge "Zeile löschen" ersetzen, anstatt einen benutzerdefinierten Schlüssel hinzuzufügen.
Alexander Smith
13

Ich benutze BetterTouchTool , es ist ziemlich cool:

Geben Sie hier die Bildbeschreibung ein

borisdiakur
quelle
Gute Alternative, ändern Sie die Liste nicht immer gut. Und leicht zu verlieren Einstellung. Hilfe Apple wird es geeignet machen.
Albert.Qing
Sehr gute Alternative, um das Problem zu lösen. Leider handelt es sich nicht um eine atomare Aktion. Wenn Sie also rückgängig machen möchten, müssen Sie zweimal Cmd Z drücken (die beiden Löschvorgänge). Auch der Fenstermanager fügt hinzu, dass es nützlich ist (ich würde auch Spectacle empfehlen).
Rudolf Real
1
BTT ist ein rundum tolles Tool. Auch diese Methode ist ziemlich zukunftssicher, solange Apple über die Aktionen verfügt, die Sie kombinieren können, um das zu tun, wonach Sie suchen.
SuperDuperTango
1
Ich hatte nicht in Betracht gezogen, BTT zu verwenden (als etwas, das ich bereits verwende!). Viel besser als etwas in der App zu bearbeiten. Außerdem können Sie Konfigurationen zwischen Maschinen synchronisieren, was ich brauche.
Relequestual
9

Die Antwort von Rhabarber ist richtig und funktioniert, aber eines ist, es gibt einen einfacheren Befehl in der plist-Datei. Befolgen Sie alle Anweisungen von Rhabarber aber

anstatt

<string>moveToEndOfLine:, deleteToBeginningOfLine:, deleteToEndOfParagraph:</string>

unten verwenden

<string>selectLine:, delete:</string>

Dies ist klarer und wirft jede Möglichkeit einer Fehlfunktion weg.

Ich möchte dies als Kommentar schreiben, aber mein "Ruf" erlaubt mir das nicht.

Kaninchenbau
quelle
Das Mischen Ihrer Lösung mit dieser Antwort löst das Problem. Vielen Dank in der Tat
marcelosalloum
8

Versuche dies:

  1. Öffnen Sie zuerst Xcode-> Einstellungen

  2. Wählen Sie Key Bindigs

  3. Suche Absatz löschen

  4. Ändern Sie " Absatz löschen" in Ihre Verknüpfung

Geben Sie hier die Bildbeschreibung ein

Bary Levy
quelle
Ich habe keine Ahnung, warum andere diese EINFACHE Lösung nicht verwenden. Bitte stimmen Sie dafür, da die anderen so viel komplexer sind. Dies ist auch, wie Sie es tun sollten: durch eine Schlüsselbindung
Checkliste
Delete ParagraphIn Xcode Version 9.0 (9A235) wird nichts ausgeführt . Hast du es in Xcode 9 getestet?
Wooseong Kim
2

Wenn Sie ein Keyboard Maestro-Benutzer sind, erstellen Sie einfach ein Makro, das Folgendes ausführt:

  • Befehl Pfeil nach links
  • Pfeil nach unten verschieben
  • Löschen

Ich habe es Command-D zugewiesen und es nur in Xcode verfügbar gemacht.

Paul Waldo
quelle
Ich verwende das Better Touch Tool und Sie sollten es auch darin zuweisen können.
Guptron
1

Es sieht so aus, als ob XCode jetzt eine Plist-Datei im Vergleich zu einer Dikt-Datei verwendet und das neue Format das Hinzufügen mehrerer Befehle zu einer Schlüsselbindung nicht unterstützt. Es scheint auch keine Möglichkeit zu geben, benutzerdefinierte Befehle zum Binden hinzuzufügen. Die einzige Möglichkeit, etwas zum Laufen zu bringen, besteht darin, eine Schlüsselbindung für die einzelnen Aktionen festzulegen, z. B. ^Dfür deleteToEndOfLine:und dann ^Lfür moveToBeginningOfLine:, damit ^L+^DSie den kombinierten Effekt erhalten.

onteria_
quelle
Es gibt bereits einige Standardeinstellungen, um dies zu handhaben. ^ k für "bis zum Zeilenende löschen", cmd-delete für "bis zum Zeilenanfang löschen".
Klaas
In der regulären (globalen) Datei keybindings.dict fügen wir separate Befehle in ein Array ein, und das funktioniert.
McUsr
1

Wenn es Ihnen nichts ausmacht, diese Schlüsselbindung in anderen Apps zu verwenden, können Sie versuchen, sie in den allgemeinen Kakao-Schlüsselbindungen festzulegen. Dies hat eine Erklärung.

LaC
quelle
2
Ich habe dies bereits versucht, aber die globalen Schlüsselbindungen funktionieren in XCode 4 nicht. Ich habe sie in TextMate getestet und sie funktionieren dort. Also habe ich die richtigen Modifikationen vorgenommen.
Klaas
1

Es scheint, als ob es jetzt nicht möglich ist ... Sie können mich gerne korrigieren, wenn ich falsch liege ... aber hier ist meine neue Lösung ...

Gehen Sie zu den Xcode-Einstellungen und dann zur Registerkarte Tastenkombinationen. Dupliziere den Standardsatz, damit du nicht sauer auf mich bist, wenn der Vorschlag, den ich mache, etwas kaputt macht, das du verwenden wirst.

finde 2 Schlüssel, die nebeneinander liegen und nicht für Befehle verwendet werden, die du verwendest ... ";", "'" vielleicht. (Ich benutze den Befehl n nicht für eine neue Datei, also habe ich n, m ausgewählt)

Stellen Sie die erste Taste auf "Zum Zeilenanfang verschieben" und die zweite Taste auf "Zum Zeilenende löschen".

Verwenden Sie dann diese Sequenz, um eine Zeile zu löschen ...

Alternativ würde etwas eingestellt werden, um eine Zeile auszuwählen, und dann einfach Löschen verwenden.

Grady-Spieler
quelle
-1

Öffnen Sie zuerst Xcode-> Einstellungen

Wählen Sie Key Bindigs

Suchen Sie dann nach Löschen

Ändern Sie die Option Zeilenende löschen in Ihre Verknüpfung (ich bevorzuge CMD + D ).

Das ist allesHier ist der Screenshot

LoGoCSE
quelle
Hm ... Dadurch wird nicht die gesamte Zeile gelöscht.
Klaas
Sie sollten den Cursor am Anfang der Zeile setzen
LoGoCSE
Ok, das ist das gleiche wie Strg-K
Klaas