W menu edycji znajduje się Duplicate
polecenie (z domyślnym skrótem ⌘D), ale jest ono (jak zauważył Halley ) przeznaczone do powielania w części Interface Builder programu Xcode.
Jak więc ( łatwo ) powielić linię w Xcode 4?
Powiązane pytanie (z działającą odpowiedzią) dla Xcode 3 ... i które nie działa dla Xcode 4.
Dlaczego nie po prostu skopiować i wkleić?
Ponieważ jest to żmudne i pociąga za sobą zbyt wiele ręcznych akrobacji:
albo (1) : przejście do początku wiersza, a następnie naciśnięcie ⇧^E, następnie kopiowanie za pomocą ⌘C, przejście do nowej linii, wyrównanie kursora i na koniec wklejanie za pomocą ⌘V;
lub (2) : ^A(ustaw kursor na początku linii), ^SPACE(ustaw znacznik), ^E(ustaw kursor na koniec linii), ⇧^W( Select to Mark
; dostosowany), kopiuj, nowa linia itp.
Jak ujął to Frank Schröder (w powiązanym pytaniu ):
Chodzi o to, aby NIE używać skrótów Cmd-C / Cmd-V.
Odpowiedzi:
Przejdź do tego folderu, który zawiera ciemną stronę mocy:
/Developer/Library/PrivateFrameworks/IDEKit.framework/Resources
/Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources
.Otwórz
IDETextKeyBindingSet.plist
.Dodaj nowy słownik i nowy element polecenia, jak na poniższym zrzucie ekranu (nazwij je, jak chcesz):
To jest:
selectLine:, copy:, moveToEndOfLine:, insertNewline:, paste:, deleteBackward:
Zrestartuj Xcode i przejdź do Preferencje - Wiązania klawiszy, wyszukaj swoje polecenie.
Ustaw kombinację klawiszy dla polecenia:
Wreszcie uwolnij moc skrótów klawiszowych w Xcode ... Ciesz się!
źródło
/Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources
wskazuje alias. W przeciwnym razie z powodzeniem wykonałem kroki Halleya w wersji 4.3.2 ... Proponuję wykonać kopię zapasową oryginalnego pliku, a następnie otworzyć go w samym Xcode (a nie w TextEdit). Ponadto, jeśli chodzi o uprawnienia: zmiana ich (tylko dla samego pliku; rekursja nie jest wymagana) w Finderze działała dobrze.<key>Custom</key> <dict> <key>Duplicate Current Line</key> <string>selectLine:, copy:, moveToEndOfLine:, insertNewline:, paste:, deleteBackward:</string> </dict>
Zaktualizuj 2020
Działa również na wersjach Xcode: 11.3.1
Działa w wersjach Xcode: 7.1, 7.3, 7.3.1, 8.0, 8.1, 8.2, 8.3, 9.0, 9.1, 9.2, 10.0, 10.1, 10.2.1
Instrukcja
dla wersji 11.3.1
poniżej wersji 11.3
dla 11.3.1
dla poniższych wersji
Zrzuty ekranu
i Zrestartuj Xcode i przejdź do
Preferences - Key Bindings
, wyszukaj polecenie, które wpisaliśmy (Duplikuj linie i Duplikuj bieżącą linię).Otóż to.
Uwaga dla użytkowników z Uniksa: -
źródło
IDETextKeyBindingSet.plist
i dodałem powyższy słownik, a następnie zamapowałem klucze w Preferencjach XCode.Ok, wymyśliłem to:
Wersja dla XCode 11:
Ponieważ stosuję tę zmianę po każdej aktualizacji XCode, stworzyłem do tego skrypt. Możliwe, że może spowodować pewne uszkodzenia, ale starałem się, aby był stosunkowo bezpieczny. Tworzy kopię pliku, a następnie zastępuje wiersz jego kopią i dodatkowym poleceniem za pomocą perla. Wymaga zainstalowania XCode w
/Applications/Xcode.app
Starsza wersja (nie jestem pewien, czy nowa jest kompatybilna ze starszymi wersjami, więc zatrzymam ją tutaj):
i skrypt dla starszej wersji, aby uniknąć ręcznej edycji plików:
edycja: drobna poprawka edit2: zmieniono na wybór akapitu edit3: dodano wersję dla XCode 11
źródło
Dzisiaj napisałem bardzo małą wtyczkę do Xcode 5, która usuwa i duplikuje linie i zaznaczenia.
Możesz go pobrać z mojego repozytorium GitHub: wtyczka XcodeKit - https://github.com/ptfly/XcodeKit
źródło
Odpowiedź @ Hailei była całkiem dobra, ale miała niefortunny efekt uboczny wbijania zawartości schowka (pozostawiając ją wypełnioną zawartością zduplikowanej linii), co jest dokładnie tą częścią ręcznego kopiowania / wklejania, której starałem się uniknąć .
Więc zmieniłem sekwencję poleceń na następującą:
Te 2
yank:
s mogą nie działać zgodnie z przeznaczeniem, jeśliNSTextKillRingSize
ustawiłeś coś innego niż1
, ale jestem prawie pewien, że1
jest to ustawienie domyślne i musisz wykonać nietrywialną pracę, aby to zmienić (wymaga dodania wpisu do~/Library/Preferences/.GlobalPreferences.plist
).źródło
defaults write -g NSTextKillRingSize 1
zamiast bawić się z GlobalPreferences.plist. ;)moveToBeginningOfLine:, deleteToEndOfLine:, yank:, insertNewline:, setMark:, moveToBeginningOfLine:, selectToMark:, yank:
Po co powielać jedną linię? Duplikat całego akapitu jest lepszy. Moja sekwencja:
Powiel bieżący akapit
Usuń bieżący akapit
Działa dobrze w Xcode 4.6
źródło
Zastanawiam się, dlaczego nikt nie wspomniał o używaniu ⌘razem z klawiszami strzałek ( ←↑→↓) zarówno do przesuwania kursora, jak i do zaznaczania całych linii (poprzez dodawanie ⇧).
Regularnie kopiuję całe linie (duplikaty), przesuwając kursor na początek linii za pomocą ⌘+ ←(zamiast ctrl+ A), a następnie używam ⌘+ ⇧+ →(zamiast ctrl+ ⇧+ E), aby zaznaczyć całą linię do końca, a następnie kopiować / wklejać.
Natknąłem się na inne wątki, w których nikt nie używa tych skrótów klawiaturowych. Są globalne w OS X i używam ich cały czas! Dużo mniej akrobatyki ręcznej;)
źródło
EDYCJA: 12 lipca 2020 r. Po ponownej aktualizacji do Xcode 11.5 mój
duplicate line
wpis klucza zplist
pliku zniknął. Musiałem to dodać ponownie. Kluczowe powiązanie nadal istniało.EDYCJA: 17 września 2019 r. Po ponownej aktualizacji do Xcode 10.3 mój
duplicate line
wpis klucza zplist
pliku zniknął. Musiałem to dodać ponownie. Kluczowe powiązanie nadal istniało.EDYCJA: 28 maja 2019 r. Po ponownej aktualizacji do Xcode 10.2 mój
duplicate line
wpis klucza zplist
pliku zniknął. Musiałem to dodać ponownie. Kluczowe powiązanie nadal istniało.EDYCJA: 23 grudnia 2018 Po aktualizacji do Xcode 10.1 wszystkie moje skróty znowu się zepsuły. Ale coś innego było to, że po zaktualizowaniu pliku plist pod kątem duplikacji linii nie musiałem definiować moich przypisań klawiszy, one już tam były. Dziwne.
EDYCJA: 14 października 2018 Xcode 10: Ktoś wysoko w Apple naprawdę uwielbia kopiować / wklejać i dba o to, aby z każdą wersją aktualizacji Xcode, duplikacja linii została usunięta z instalacji wszystkich. My, programiści, byliśmy bardzo sfrustrowani tym nonsensem, który od zawsze miał miejsce w Xcode, jedynym IDE bez opcji kopiowania linii. Właśnie zaktualizowałem do Xcode 10 i jak się domyślacie - wszystkie moje klawisze skrótów zostały usunięte wraz z funkcją powielania linii. Jednak można to naprawić, tak jak w oryginalnej odpowiedzi. Niewielka różnica tym razem polega na tym, że będziesz potrzebować następującego wiersza:
EDYCJA: Xcode 9: Musiałem przerobić moje skróty oraz powielanie i usuwanie linii, ale dobrą rzeczą jest to, że teraz możesz ponownie edytować IDETextKeyBindingSet.plist. Ten wysoko postawiony facet z Apple musi być na wakacjach, kiedy wydali tę wersję.
EDYCJA: Xcode 8: Buggy, nie możesz w ogóle modyfikować pliku IDETextKeyBindingSet.plist. Xcode resetuje go przy starcie. Ten wysoko postawiony facet w Apple jest naprawdę zdeterminowany, abyśmy używali kopiowania / wklejania zamiast prostego powielania linii, jak we wszystkich innych IDE.
EDYCJA: Xcode 7.1 i nadal nie ma skrótów do powielania i usuwania linii. To jedyne IDE, z jakim kiedykolwiek pracowałem, bez takich skrótów. Nie wyobrażam sobie życia programisty bez tych dwóch krytycznych skrótów.
Oto, jak można to zrobić:
Najpierw musimy zmodyfikować plik plist, który znajduje się w pakiecie Xcode.app (wymaga sudo do edycji)
/Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources/IDETextKeyBindingSet.plist
Następnie poszukaj
<key>Insertions and Indentations</key>
i pod<dict>
tagiem dodaj:Następnie znajdź i te w sekcji
<key>Deletions</key>
pod<dict>
tagiem:Teraz otwórz / uruchom ponownie Xcode, przejdź do Preferencji i przejdź do zakładki „Wiązania klawiszy”. Użyj paska wyszukiwania, aby filtrować i szukać nowych skrótów. Następnie kliknij przed opisem skrótu, aby przypisać mu odpowiedni skrót. Upewnij się, że Twój skrót nie powoduje konfliktu z istniejącymi skrótami.
źródło
Rozważyłbym zmianę sekwencji poleceń, aby:
Dodany
deleteToBeginningOfLine
zachowuje wcięcie powielonej linii.źródło
insertLineBreak potrzebował przynajmniej dla mnie do zrobienia kopii w nowej linii, bez tego mam kopię w tej samej linii
źródło
Miałem duży problem z odblokowaniem pliku .plist na MacOS Sierra i Xcode 9, nawet decyzja @Tim nie działała dla mnie. Jeśli masz ten sam problem, przejdź do terminala i zrób to:
Poniżej opisano również kilka innych możliwych sposobów, aby to zrobić .
Następnie w edytorze nano kliknij
^W
i wpisz „wstawki”, aby przejść do części „Wstawienia i wcięcia”. Tuż pod<dict>
tagiem wklej ten xml-snippet:Naciśnij
control + X
, a następnieY
,Enter
aby zapisać plik w edytorze nano.UPD: Podjąłem lepszą decyzję, która dodaje dodatkową linię przed powieleniem (przydatne, gdy chcesz zduplikować linię, która ma inną linię tuż pod nią):
źródło
Oto moje wpisy Delete ( CTRL+ D) i Duplicate ( CMD+ SHIFT+ D) z mojego IDETextKeyBindingSet.plist. (w /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Versions/A/Resources)
Właśnie skonfigurowałem je w Xcode 4.6.1 (na podstawie odpowiedzi użytkownika570753 powyżej i gdzie indziej)
źródło
Każdy użytkownik wysublimowanego tekstu, który chciałby dopasować duplicateLineUp i duplicateLineDown do sublime w XCode, dodaj następujące elementy do swojego pliku IDETextKeyBindingSet.plist
źródło
W przypadku, gdy komukolwiek innemu odmówiono dostępu do edycji IDETextKeyBindingSet.plist, możesz nadać sobie uprawnienia do odczytu / zapisu przez:
źródło
Aby uzupełnić odpowiedź Hailei, polecenia, które działały dla mnie najlepiej, to:
Jego sugerowane polecenia polegały na skopiowaniu żądanej linii dwie linie poniżej, dla mnie.
źródło
Obsługiwane są zduplikowane wiersze. (Działa w Xcode 9.2)
źródło
Jeśli chodzi o Xcode 11, żadne z powyższych nie działało dla mnie. Pierwsza odpowiedź zachowywała się dziwnie, ponieważ wstawiała wiersz po następnym. Jednak następująca odpowiedź zadziałała dla mnie.
źródło