Jak utworzyć skrót klawiaturowy Delete-Line w Xcode 8? Rozwiązania Xcode 3 już nie działają

80

W poprzednich wersjach Xcodemożna było utworzyć powiązanie klawiszowe w celu usunięcia bieżącej linii. Były różne rozwiązania i są one opisane na przykład tutaj:

Xcode: klawisz skrótu do usuwania linii

Duplikuj / usuń wiersz Xcode

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/

Wszystkie rozwiązania obejmują modyfikację jednego z tych plików:

~ / Library / Application Support / Xcode / Key Bindings / *. Pbxkeys
~ / Library / KeyBindings / DefaultKeyBinding.dict
~ / Library / KeyBindings / PBKeyBinding.dict

Dobrym źródłem informacji o istniejących skrótach w programie Xcode 4jest http://cocoasamurai.blogspot.com/2011/03/xcode-4-keyboard-shortcuts-now.html . Na liście znajduje się wiele informacji o usuwaniu, ale nie ma ich o „usuwaniu linii”.

ALE od tego czasu te rozwiązania NIE działają Xcode 4.

Aktualizacja : problem jest nadal taki sam jak w dniuXcode 5.1.1

Aktualizacja : problem jest nadal taki sam jak w dniuXcode 6.1 GM Seed 2

Aktualizacja : nadal dotyczy Xcode w wersji 7.3 (7D175) od 26 kwietnia 2016 r

Aktualizacja : sześć lat później Xcode 8.3 ma wbudowane rozwiązanie. Zobacz odpowiedź poniżej.

Klaas
źródło
W międzyczasie postanowiłem stworzyć makro klawiatury za pomocą keyboardmaestro.com .
Klaas
Myślę, że jest kilka rozwiązań wymienionych poniżej. Osobiście używam makra Keyboard Maestro.
Klaas,

Odpowiedzi:

71

Wygląda na to, że Xcode 8.3 w końcu dodał polecenie Usuń linię :)

Domyślnie żaden skrót klawiaturowy nie jest do niego przypisany, więc musisz dodać go samodzielnie w:

  1. Otwórz Xcode > Preferencje > Powiązania klawiszy
  2. Szukaj Delete Line
  3. Dodaj skrót klawiaturowy w kolumnie Klucz

Powiązania klucza Xcode

Paulo Mattos
źródło
1
ŁAŁ! Dobry chwyt! Nigdy nie myślałem, że to się kiedykolwiek stanie!
Klaas
Czy ktoś się domyślił, co jeszcze mogło się zmienić?
Klaas
1
@Klaas ja też, nigdy nie myślałem, że to zobaczę! Przeprowadziłem różnicę między IDETextKeyBindingSet.plistplikami Xcode 8.2.1 i Xcode 8.3.2 i jedyną wykrytą zmianą było to polecenie Usuń wiersz powyżej :(
Paulo Mattos
@FelixTurner Czy próbowałeś już z nowym Xcode beta 2 ?
Paulo Mattos
3
Znalazłem obejście problemu w Xocde 9 Beta . Zobacz moją odpowiedź poniżej. stackoverflow.com/a/45868495/1287336
Wooseong Kim
95

Po wielu poszukiwaniach tu i tam doszedłem do następującego rozwiązania:

Naciśnij i przytrzymaj controlklawisz, a następnie naciśnij AKK.

(Uwaga: drugi Kusuwa pusty wiersz).

Właściwie jest to kombinacja dwóch poleceń: Move to Beginning of Paragraph& Delete to End of Paragraph. Możesz także użyć / ustawić inne klawisze, a także możesz użyć / set / zmienić przypisania klawiszy dla innych poleceń, np . Move to Beginning of Line& Delete to End of Line. Użyłem powyższych (domyślnych) skrótów klawiszowych, ponieważ pasowały do ​​mnie.

Edytować:

Aby usunąć więcej niż jedną kolejną linię, najpierw naciśnij i przytrzymaj controlklawisz, a następnie naciśnij A(aby przejść do początku akapitu / wiersza), a następnie naciśnij i przytrzymaj, Każ wszystkie wiersze zostaną usunięte (to zadziała, gdy kursor pozostanie na początek).

Wystarczy, aby zadanie łatwe (dla mnie), mam ustawione commandDna Delete to End of Paragrapha home/ end, aby przejść do początku / końcu akapitu.

Vasu
źródło
2
Niezłe rozwiązanie, ale naprawdę szukam jednego skrótu. Jeśli chcę na przykład usunąć 5 wierszy w TextWrangler, naciskam tylko pięć razy cmd-d. O dziwo, cmd-d nie jest używany w Xcode ...
Klaas
@Klaas, zobacz moją zaktualizowaną odpowiedź. Może nie być tym, czego się spodziewasz, ale nadal jest to dobre rozwiązanie.
Vasu
jak tylko twoja odpowiedź otrzyma kilka pozytywnych głosów, zaakceptuję ją, ponieważ Xcode 4 nie będzie mieć tego w najbliższym czasie.
Klaas
xCode jest okropny! - Programista Android korzystający z Android Studio.
M'hamed
najdłuższy skrót w historii zobacz CTRL + A + K + K, aby usunąć bieżącą linię
canbax,
59

Rozumiem! Działa to w XCode 4.3 do 4.5 i nie wymaga dodatkowych aplikacji i jest specyficzne dla XCode.

To rozwiązanie jest w zasadzie takie samo jak polecenie Powiel wiersz opisane tutaj :

Edytuj plik plist

Znajduje się na /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources/IDETextKeyBindingSet.plist

Zauważ, że:

  • połączona odpowiedź sugeruje użycie do tego XCode, ale uważam, że powoduje to awarię XCode
  • ta ścieżka dotyczy Lion - może się różnić w przypadku innych wersji systemu operacyjnego
  • może być konieczne sudo lub zmiana uprawnień do edycji tego pliku
  • zamknij XCode przed edycją

Dodaj nowy <dict>element

Dodaj ten tekst POWYŻEJ zamknięcia <dict>na dole tego pliku

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

Zauważ, że:

  • To jest wewnątrz istniejącego, <dict>więc jest </dict></plist>po tym
  • Powoduje to skojarzenie nazwanej akcji „Usuń bieżącą linię jednym trafieniem” z trzema kluczowymi akcjami w ciągu. Bawiłem się tutaj różnymi opcjami, aby uzyskać odpowiednią kombinację. Na przykład, jeśli spróbujesz moveToBeginningOfLine, deleteToEndOfLine zamiast odwrotnie, użycie go na pustych wierszach spowoduje usunięcie wiersza i całej następnej linii. Co jest nieprzyjemne

Zapisz to i otwórz XCode

Dodaj nowe powiązanie klucza w XCode

Zobacz zrzuty ekranu w powiązanej odpowiedzi lub zrób to:

  1. Otwórz preferencje XCode
  2. Wybierz opcję Key Bindings
  3. Kliknij Wszystkie
  4. W polu wyszukiwania wpisz „Usuń” i wyszukaj „Usuń bieżącą linię jednym trafieniem”
  5. Dodaj nowe wiązanie.

To powinno wystarczyć, ale z jednym zastrzeżeniem. Nigdy nie mogłem zmusić XCode do zapisania nowego wiązania. Ten sam problem jest opisany tutaj, chociaż moje obejście miało niewielkie różnice:

  1. Utwórz duplikat domyślnych powiązań (naciśnij przycisk + w lewym dolnym rogu okna Wiązania i utwórz duplikat)
  2. Ustaw nowe wiązanie w duplikacie
  3. Zamknij okno preferencji (to jest odmiana!)
  4. Otwórz ponownie preferencje i utwórz nową kopię starego duplikatu i usuń stary duplikat.

Co za bzdura, co? Ale to działa. Teraz mam zmapowane Ctrl + D, aby usunąć całą bieżącą linię w XCode 4.3 na Lion.

Rabarbar
źródło
Aktualizacja: jednym z ograniczeń, które uważam za irytujące w przypadku tego rozwiązania, jest to, że usuwa ono tylko jedną linię na raz, nawet jeśli masz dużo zaznaczonych. Moją naturalną tendencją jest zaznaczanie 3 linii i naciśnięcie ctrl + D i wyczyszczenie ich wszystkich - ale tak nie jest.
Rabarbar
Zwróć uwagę, że jeśli zainstalujesz nową wersję XCode, nie zostanie to zachowane, podczas gdy zwykłe dostosowania powiązań klawiszy tak. („Uaktualniam”, zmieniając nazwę starego XCode.app i instalując nowy od nowa). Rzeczywiste powiązania klawiszy znajdują się w ~ / Library ... więc są zachowane, ale ten nowy wpis nie jest
Rhubarb,
Tak, działa w Xcode 5 i zapisuje powiązanie klawiszy, aby zachęcić innych do myślenia, że ​​warto się tym przejmować :)
RedYeti
@Rhubarb Aby usunąć kilka linii jednocześnie mając zaznaczony tekst w tych liniach i tylko trafienia skrót tylko dodać delete:przed sekwencji poleceń: delete:, moveToEndOfLine:, deleteToBeginningOfLine:, deleteToEndOfParagraph:. Byłoby wspaniale, gdybyś wstawił to do swojej odpowiedzi.
Maic López Sáenz
2
Działa to w Xcode 6.2 (6C86e) i nie potrzebowałem też obejścia, aby Xcode „zapisywał” powiązanie klawiszy. Yay! :)
Will Hains
16

Znalazłem tymczasowe obejście dla Xcode 9 .

Otwórz Xcode / Content / Frameworks / IDEKit.framework / Resources / IDETextK‌ eyBindingSet.plist i dodaj poniższe wiersze.

Naśladuje akcję, która ma miejsce w Xcode 8 z ograniczoną obsługą. Może usunąć tylko jedną linię, ale jakoś jestem zadowolony. Mam nadzieję, że wkrótce zostanie to naprawione.

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

Po ponownym uruchomieniu Xcode możesz zobaczyć niestandardowy element Key Bindingsjak poniżej.

wprowadź opis obrazu tutaj

Powiąż i używaj!

Edycja) Myślę, że poniżej jeden jest lepszy niż oryginalny.

<string>moveToEndOfLine:, deleteToBeginningOfLine:, deleteToEndOfParagraph:</string>
Wooseong Kim
źródło
2
Prawidłowa odpowiedź na Xcode 9 tutaj. To działa Xcode 9 wersja 9.0 (9A235)
uspython
Dlaczego to się zepsuło w Xcode 9? To działało dla mnie trochę. Musiałem zastąpić wartość istniejącej wartości ciągu Usuń Line zamiast dodawać dostosowany klucz.
Alexander Smith
13

Używam BetterTouchTool , jest całkiem fajny:

wprowadź opis obrazu tutaj

borisdiakur
źródło
Dobra alternatywa, modyfikowanie plist nie zawsze jest dobre. I łatwe do utraty ustawienia. Pomóż Apple uczynić go odpowiednim.
Albert, Qing,
Bardzo dobra alternatywa rozwiązania problemu. Niestety nie jest to akcja atomowa, więc jeśli chcesz cofnąć, musisz dwukrotnie nacisnąć Cmd Z (dwa usunięcia). Dodatkowo menedżer okien jest przydatny (polecam również Spectacle).
Rudolf Real
1
BTT to wszechstronne, niesamowite narzędzie. Ta metoda jest również odporna na przyszłość, o ile Apple ma działania, które możesz łączyć, aby robić to, czego szukasz.
SuperDuperTango
1
Nie rozważałem używania BTT (jako czegoś, z czego już korzystam!). Znacznie lepiej niż edytowanie czegoś w aplikacji. Dodatkowo możesz synchronizować konfiguracje między maszynami, czego potrzebuję.
Relequestual
9

Odpowiedź Rhubarba jest poprawna i działa, ale jedno, jest prostsze polecenie w pliku plist. Postępuj zgodnie ze wszystkimi instrukcjami Rhubarb 's but

zamiast

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

użyj poniżej

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

Jest to bardziej zrozumiałe i eliminuje możliwość nieprawidłowego działania.

Chcę to napisać jako komentarz, ale moja „reputacja” nie pozwala mi na to.

Królicza nora
źródło
Wymieszanie twojego rozwiązania z tą odpowiedzią rozwiązuje problem. Rzeczywiście dzięki
marcelosalloum
8

Spróbuj tego:

  1. Najpierw otwórz Xcode-> Preferencje

  2. Wybierz opcję Key Bindigs

  3. szukaj Usuń akapit

  4. Zmień Usuń akapit na swój skrót

wprowadź opis obrazu tutaj

Bary Levy
źródło
Nie mam pojęcia, dlaczego inni nie używają tego PROSTEGO rozwiązania. Zagłosuj na to, ponieważ inne są o wiele bardziej złożone. To jest również sposób, w jaki POWINIENEŚ to zrobić: poprzez powiązanie z klawiszami
lista kontrolna
Nic się nie dzieje, wykonaj Delete Paragraphw Xcode w wersji 9.0 (9A235). Czy przetestowałeś to w Xcode 9?
Wooseong Kim,
2

Jeśli jesteś użytkownikiem Keyboard Maestro, po prostu utwórz makro, które wykonuje następujące czynności:

  • Polecenie Strzałka w lewo
  • Shift Down Arrow
  • Usunąć

Przypisałem go do Command-D i udostępniłem tylko w Xcode.

Paul Waldo
źródło
Używam narzędzia Better Touch Tool i powinieneś być w stanie to przypisać.
abc123
1

Wygląda na to, że XCode używa teraz pliku plist zamiast pliku dict, a nowy format nie obsługuje dodawania wielu poleceń do powiązania klawiszy. Wydaje się również, że nie ma sposobu na dodanie niestandardowych poleceń do powiązania z żadnym z nich. Jedynym sposobem, w jaki znalazłem coś działającego, jest ustawienie kluczowego powiązania dla oddzielnych działań, takich jak ^Dfor deleteToEndOfLine:, a następnie ^Lfor moveToBeginningOfLine:, dając ci ^L+^Dpołączony efekt.

onteria_
źródło
Istnieją już pewne ustawienia domyślne, które to obsługują. ^ k dla „usuń do końca wiersza”, cmd-delete dla „usuń do początku wiersza”.
Klaas
W zwykłym pliku (Global) keybindings.dict umieszczamy oddzielne polecenia w tablicy i to działa.
McUsr
1

Jeśli nie masz nic przeciwko posiadaniu tego powiązania klawiszy w innych aplikacjach, możesz spróbować ustawić je w ogólnych powiązaniach klawiszy Cocoa. To ma wyjaśnienie.

Gumilaka
źródło
2
Próbowałem już tego, ale globalne przypisania klawiszy nie działają w XCode 4. Przetestowałem je w TextMate i tam działają. Więc zrobiłem odpowiednie modyfikacje.
Klaas
1

wydaje się, że nie można tego teraz zrobić ... nie krępuj się mnie poprawić, jeśli się mylę ... ale oto moje nowe rozwiązanie ...

przejdź do preferencji xcode, a następnie do zakładki przypisania klawiszy. zduplikuj domyślny zestaw, abyś nie był na mnie zły, gdy sugestia, że ​​zrobię, zepsuje coś, czego użyjesz.

znajdź 2 klawisze, które sąsiadują ze sobą i nie są używane dla żadnych poleceń, których używasz ... ";", "'" być może. (Nie używam polecenia n dla nowego pliku, więc wybrałem n, m)

ustaw pierwszy klawisz na „Przenieś na początek wiersza”, a drugi na „Usuń do końca wiersza”

następnie użyj tej sekwencji, aby usunąć linię ...

alternate ustawiłoby coś do zaznaczenia linii, a następnie po prostu użyj delete.

Grady Player
źródło
-1

Najpierw otwórz Xcode-> Preferencje

Wybierz opcję Key Bindigs

Następnie wyszukaj Usuń

Zmień Usuń koniec linii na swój skrót (wolę CMD + D )

To wszystkoOto zrzut ekranu

LoGoCSE
źródło
Hm ... To nie usuwa całej linii.
Klaas
Powinieneś ustawić kursor na początku linii
LoGoCSE
Ok, to jest to samo co ctrl-k
Klaas