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.


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


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.


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.


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>

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


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.


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


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.


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.


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.


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.



-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


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.