Duplikuj / usuń wiersz Xcode

128

Pochodzący z Eclipse i używany do powielania linii przez cały czas, to dość dziwne odkrycie, że Xcode nie ma takiej funkcji. Czy to prawda?

Wiem, że można zmienić skróty klawiszowe w całym systemie, ale nie o to mi chodzi.

Lato
źródło
możliwy duplikat Xcode: klawisz skrótu do usuwania linii
joshperry
1
ta konfiguracja działa dla 9.2 stackoverflow.com/a/34195483/1348522
Zumry Mohamed
Ciągle jestem pod wrażeniem tego, jak zły jest XCode, biorąc pod uwagę, jak wiele rozwoju wkłada w to Apple
Andy Ray

Odpowiedzi:

91

Chodzi o to, aby NIE używać skrótów Cmd-C/ Cmd-V. Mam ten sam problem pochodzący z IntelliJ, a możliwość duplikowania wierszy za pomocą Cmd-Di usuwania ich za pomocą Cmd-Yto duża oszczędność czasu.

Od tamtej pory mnie to niepokoi. Wygląda jednak na to, że ktoś znalazł rozwiązanie, które działa.

Krótko mówiąc, utwórz plik ~/Library/KeyBindings/PBKeyBinding.dictz następującą zawartością i uruchom ponownie Xcode.

{
    "^$K" = (
        "selectLine:",
        "cut:"
    );

    "^$D" = (
        "selectLine:",
        "copy:",
        "moveToEndOfLine:",
        "insertNewline:",
        "paste:",
        "deleteBackward:"
    );
}

Spowoduje to utworzenie dwóch skrótów: Ctrl- Shift- Kdo usuwania bieżącej linii i Ctrl- Shift- Ddo kopiowania bieżącej linii. Pamiętaj, że zadziała to tylko wtedy, gdy NIE używasz niestandardowego powiązania klawiszy ustawionego w Xcode. Przełącz się na „XCode Default” i wszystko powinno działać. Testowano na XCode 3.2 w systemie Snow Leopard.

Więcej informacji na temat przypisań klawiszy w systemie Mac OS X: http://funkworks.blogspot.it/2013/03/republishing-of-wwwerasetotheleftcompos.html

Frank Schröder
źródło
5
To powinna być prawdziwa odpowiedź. Btw - jeśli chcesz zaimportować skrót cmd-d (usuń linię) z Eclipse, musisz najpierw zmienić skrót Dodaj zakładkę w menu edycji w XCode
Chris R
@joshperry, cokolwiek, co działa z Xcode 4+? DuplicatePoleceń (w Edit -> Duplicate) wydaje się być „zawsze” wyszarzone (i nie przeznaczone do powielania linii).
Blaz
Używam OS X od pierwszego dnia i nigdy nie wiedziałem o przypisaniach klawiszy. co za fajna funkcja. Spójrz na ten bardzo fajny edytor przypisań klawiszy GUI, na który się natknąłem .
Alex Gray
Więcej informacji można znaleźć w witrynie programistów Apple .
aleclarson
brzmiało świetnie, ale wygląda na to, że nie działało dla mnie w Xcode 5.0.2 :(
voghDev
106

Aby usunąć wiersz : Ctrl-A aby przejść na początek wiersza, następnie Ctrl-K aby go usunąć, a innym razem Ctrl-K aby usunąć pusty wiersz. (Nie używam Xcode bardzo często, ale jestem do tego przyzwyczajony w Emacsie i innych wejściach tekstowych z powiązaniami podobnymi do Emacsa i wydaje się, że działa również w Xcode).

I aby powielić linię : nie znam wielu programów, które mają do tego polecenie, ale zwykle używam po prostu Kopiuj + Wklej - w Xcode jest to podobne do CUA: Ctrl+A aby przejść na początek linii, Shift+ aby wybrać it, Command +, Caby skopiować i Command + *, Vaby wkleić dwukrotnie (raz nadpisuje linię i raz dołącza do niej).

(od osoby, która cały czas pisze i edytuje tekst, tak często w różnych programach, i od czasu do czasu wkurza się, że musi rozpraszać się głupim widżetem podczas wprowadzania niewielkiej korekty tekstu, że po prostu nie może uniknąć zapamiętania tych sekwencji i nawyki)

Tom Alsberg
źródło
3
Będzie to działać we wszystkich aplikacjach używających Cocoa do wprowadzania tekstu, ponieważ jest to funkcja Cocoa Text System. Takich skrótów jest znacznie więcej, a ich listę można znaleźć tutaj: hcs.harvard.edu/~jrus/Site/System%20Bindings.html :)
Ahti
2
„yank” powinno być ctrl + Y na nowoczesnych komputerach Mac.
CarmeloS
Command + V, aby go wkleić i ponownie wprowadzić wcięcie. Control -Y również wklei, ale nie spowoduje ponownego wcięcia wklejonego tekstu.
Scott Gardner
77

Usuń linię taką jak eclipse CTRL+ D(testowane na Xcode 4.5.1):

Przede wszystkim zmień te prawa:

sudo chmod 666 /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources/IDETextKeyBindingSet.plist

sudo chmod 777 /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources/

Otwórz za /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources/IDETextKeyBindingSet.plistpomocą samego Xcode i dodaj ten nowy wpis:

deleteToBeginningOfLine:, moveToEndOfLine:, deleteToBeginningOfLine:, deleteBackward:, moveDown:, moveToBeginningOfLine:

wprowadź opis obrazu tutaj

Uruchom ponownie Xcode i otwórz Xcode> Preferencje> KeyBindings. Znajdź swoje makro i zdefiniuj skrót:

wprowadź opis obrazu tutaj

Otwórz
źródło
5
Jeśli chcesz dodać sposób na zduplikowanie linii, zrób to samo, ale wklejając nową wartość w pliku IDETextKeyBindingSet.plist, wklej ten kod „selectLine :, copy :, moveToEndOfLine :, insertNewline :, paste :, deleteBackward: ”.
jollyr0ger
+1 To rozwiązanie działało, ale w Xcode 4.6.1 ^ D było w konflikcie z innymi istniejącymi powiązaniami klawiszy.
bernardn
Jak możesz to uzyskać w przypadku opcji „Powiel bieżącą linię”?
Markus,
To nie działa w xcode 6.
Wywoływana
1
Uwielbiam to, działa dla mnie jak urok pod XCode 6.3.1.
cthulhu
9

Wypróbowałem rozwiązanie przypisywania klawiszy, ale nie mogłem go uruchomić. Jednak edycja moich przypisań klawiszy XCode działa jak urok. Oto jak to zrobiłem.

To rozwiązanie nie zmienia zawartości Schowka!

Otwórz powiązania klawiszy XCode:

tekst alternatywny

W oknie dialogowym Edytuj skrypty użytkownika:

  1. Zduplikuj skrypt „Przenieś wiersz w dół” i zmień jego nazwę
  2. Powiel plik „Move Line Down.scpt”, zmień nazwę skryptu, wybierz plik (dwukrotne kliknięcie) w edytorze skryptów
  3. Edytuj skrypt (Otwiera „AppleScript Editor”) i usuń fragment „usuń (akapity od startLine do endLine)”.
  4. Jeśli nie chcesz ponownie uruchamiać XCode, wydaje się, że musisz usunąć i ponownie dodać skrypt. Upewnij się, że masz "Wyjście" ustawione na "Odrzuć wyjście", w przeciwnym razie będziesz miał "(null)" w swoim pliku źródłowym
  5. Trochę zmodyfikowałem skrypty, aby wybrać odpowiednie linie:

Duplikat Line Up:

using terms from application "Xcode"
tell first text document
    set {startLine, endLine} to selected paragraph range

    if startLine > 1 then
        set theText to (paragraphs startLine through endLine)
        set theText to (theText as string)
        make new paragraph at beginning of paragraph (startLine) with data theText
        set selected paragraph range to {endLine + 1, endLine + endLine - startLine + 1}
    else
        beep 1
    end if
end tell
end using terms from

Duplikuj wiersz w dół:

using terms from application "Xcode"
tell first text document
    set {startLine, endLine} to selected paragraph range
    if endLine < (count paragraphs) then
        set theText to (paragraphs startLine through endLine)
        set theText to (theText as string)
        (* delete (paragraphs startLine through endLine) *)
        make new paragraph at beginning of paragraph (endLine + 1) with data theText
        set selected paragraph range to {startLine, endLine}
    else
        beep 1
    end if
end tell
end using terms from

tekst alternatywny

lewiatan
źródło
2
Nie wspomniano wyraźnie powyżej, istnieją skrypty dla Usuń linię, Przenieś wiersz w górę i Przenieś wiersz w dół. Zaakceptowana odpowiedź ma tę wadę, że działa tylko wtedy, gdy masz przypisania klawiszy ustawione na XCode Default. Korzystanie ze skryptów pozwala zachować własne przypisania klawiszy, ponieważ przypisania klawiszy dla skryptów są obsługiwane oddzielnie od tych w pozostałej części XCode.
Patogen
7

OK, więc miałem to działało przez chwilę, a potem nagle się zepsuło. Teraz połączyłem z różnych postów tutaj i znalazłem rozwiązanie, które działa dla XCode 6.3.1.

  1. Idź do za /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Versions/A/pomocą Findera.

  2. znajdź folder o nazwie Resources. Kliknij prawym przyciskiem myszy, naciśnij Uzyskaj informacje, odblokuj ustawienia udostępniania i uprawnień (naciskając blokadę) i ustaw je na Odczyt i zapis dla wszystkich.

  3. Wejdź do folderu i znajdź plik IDETextKeyBindingSet.plist. Kliknij prawym przyciskiem myszy, naciśnij Uzyskaj informacje, odblokuj ustawienia udostępniania i uprawnień (naciskając blokadę) i ustaw je na Odczyt i zapis dla wszystkich.

  4. Otwórz plik za pomocą XCode (domyślne)

  5. Znajdź usunięcia, kliknij prawym przyciskiem myszy i dodaj nowy wiersz. Nazwij go na przykład Usuń linię. W polu Wartość wpisz: selectLine:, deleteBackward:. (Można to również zrobić za duplikat linii: selectLine:,copy:,moveToEndOfLine:,insertNewline:,paste:,deleteBackward:)

  1. Uruchom XCode, przejdź do preferencji / skrótów klawiszowych i wyszukaj Usuń linię. Ustaw skrót. Cieszyć się.
Joakim
źródło
6

Ponieważ Xcode 4 utrudnia implementację przy użyciu skrótów klawiszowych , zdecydowałem się na użycie Keyboard Maestro ( Quickeys też powinien działać, ale nie jest w pełni kompatybilny z Lion). Na przykład tutaj jest mój skrót Keyboard Maestro (powiązany z ⌘-⇧-D):

http://bit.ly/thC6yf

Raheel
źródło
3
„Kup teraz za 36 USD” ... co za kradzież) lol ... dopóki nie zobaczyłem tego na stronie Maestro, pomyślałem, że może to być dobre rozwiązanie
ycomp
@ycomp, oto bezpłatne rozwiązanie .
Blaz
5

Jesteśmy na Xcode 9.0 i przypisania klawiszy nadal nie działają. Westchnienie.

Uważam, że ta treść jest bardzo pomocna, więc zamieszczam ją ponownie tutaj na przyszłość:

  1. otwarty /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Versions/A/Resources/IDETextKeyBindingSet.plist
  2. Dodaj następujący fragment kodu XML do tego pliku tuż nad dolną częścią </dict>
  3. Przejdź do preferencji Xcode -> Wiązania klawiszy -> zakładka Tekst -> Przewiń, aż zobaczysz Duplikację
  4. Kliknij w Duplicate Current Line, dodaj do niej skrót, np. Cmnd + D (rozwiąż wszelkie zduplikowane powiązania)
  5. Otwórz Xcode

<key>Duplication</key> <dict> <key>Duplicate Current Line</key> <string>moveToBeginningOfLine:, deleteToEndOfLine:, yank:, insertNewline:, moveToBeginningOfLine:, yank:</string> <key>Duplicate Lines</key> <string>selectLine:, copy:, moveToEndOfLine:, insertNewline:, paste:, deleteBackward:</string> <key>Delete Line</key> <string>selectLine:, deleteBackward:</string> </dict>

Jannie Theunissen
źródło
5

Aby usunąć linię w Xcode 10.1, wykonaj czynności przedstawione na poniższym zrzucie ekranu, aby dodać klawisz skrótu.

wprowadź opis obrazu tutaj

Gagandeep Gambhir
źródło
5

Wiem, że ten wątek jest dość stary, ale znalazłem inne rozwiązanie za pomocą BetterTouchTool , możesz wykonać sekwencję Ctrl+ A, Ctrl+ K, Ctrl+ Kw jednym skrócie, konfigurując w ten sposób w BTT:

wprowadź opis obrazu tutaj

(Użyj przycisku Dołącz dodatkową akcję, aby dołączyć drugi i trzeci skrót)

PS: Pochodzi z Eclipse, gdzie Cmd+ Djest linią usuwania ^^

Laurent Meyer
źródło
4

Kliknij trzykrotnie, aby zaznaczyć całą linię, Command-c, aby zaznaczyć i dwukrotnie Command-v, aby ją powielić. To nie jest funkcja Xcode, to tylko część systemu operacyjnego.

Paul Tomblin
źródło
2
Kliknięcie myszą, a nawet gorzej, potrójne? Z pewnością nie jest to rozwiązanie, którego szukają ludzie, którzy chcą używać skrótów klawiaturowych.
Ixx
4

Użyj skryptów użytkownika.

Istnieją jeszcze skrypty do przenoszenia i usuwania linii. Musisz zdefiniować skróty klawiszowe dla tych skryptów (menu Skrypty -> Edytuj skrypty użytkownika ... , pod xCode 3.2).

Aby powielić linię, musisz stworzyć własny skrypt. Ale to bardzo proste! Powiel skrypt „Przenieś wiersz w dół” i usuń wiersz usuwający zaznaczony tekst:

delete (paragraphs startLine through endLine)
Damien Flament
źródło
3

Jest to rozwiązanie dla XCode4 linii powielania się tutaj

Dodałem również usuwanie linii do plist:

<key>Remove Line</key> <string>selectLine:, deleteBackward:</string>

MartinMcB
źródło
3

Nie ma potrzeby modyfikowania Xcode. Możesz po prostu użyć rozszerzenia Xcode Linex

wprowadź opis obrazu tutaj

Aladin
źródło
niesamowite ! greate solution
Thomas Besnehard
2

Rozwiązanie stworzone przez damien.flament działa świetnie i może być konieczne ustawienie wyjścia na „Discard Output”, patrz obrazek poniżej

Ustawienie skryptów użytkownika

PS: Nie wiem, jak skomentować jego odpowiedź.

palaniraja
źródło
2

Jak wspomniano powyżej, zamknij XCode i wstaw następujące do ~/Library/Application Support/Xcode/Key Bindings/ <user>.pbxkeysśrodka <dict>w <key>text</key>sekcji:

    <key>^D</key>                                                                                                      
    <array>                                                                                                            
        <string>moveToLeftEndOfLine:</string>                                                                               
        <string>deleteToEndOfLine:</string>                                                                                      
    </array>                                                                                                           
    <key>^K</key>                                                                                                      
    <array>                                                                                                            
       <string>selectLine:</string>                                                                               
       <string>copy:</string>                                                                                     
       <string>moveToEndOfLine:</string>                                                                          
       <string>insertNewline:</string>                                                                            
       <string>paste:</string>                                                                                    
       <string>deleteBackward:</string>                                                                           
    </array>

Uruchom XCode i ciesz się CTRL- SHIFT- Di CTRL- SHIFT- K.
Jeśli chcesz CTRL- Di CTRL- K, zamiast tego użyj ^di ^kw kluczowych definicjach. Upewnij się, że w pliku nie ma zduplikowanych powiązań klawiszy.

U mnie działa dobrze z XCode 3.2

askh
źródło
2

Jest to możliwe dzięki BetterTouchTool . CMD + D powieli linię. Utwórz nowy skrót, taki jak ten:

wprowadź opis obrazu tutaj

Użyj przycisku Dołącz dodatkową akcję, aby dołączyć drugi i trzeci skrót

Adam Studenic
źródło
1

Jeśli już dostosował swoje Xcode klawiszy, musisz edytować plik: ~/Library/Application Support/Xcode/Key Bindings/<user>.pbxkeys. Po prostu dodaj dwie tablice (opisane powyżej) do Root/textsłownika.

MonsieurDart
źródło
Cześć. Nie do końca to rozumiem, dokument pbxkey to XML, podczas gdy plik ~ / Library / KeyBindings / PBKeyBinding.dict opisany powyżej jest całkowicie innym formatem (wygląda trochę jak JSON). W dokumencie pbxkeys nie ma wpisu głównego / tekstu. Czy to dlatego, że używam późniejszej wersji?
Ben Clayton,
1

Trzy kroki, aby usunąć bieżącą linię (patrz zbyt długo, ale zrób bardzo szybko: D)

Cmd+ : przejdź do końca linii
Cmd+ Delete: usuń do początku linii
Delete: usuń pustą linię

huync
źródło
0

Dla Xcode 6.1 dostałem się do Xcode> Preferencje> KeyBindings> Tekst I jest "Usuń do końca wiersza" i przypisz odpowiedni klawisz.

SpyZip
źródło
0

Wtyczka XCodePlus do usuwania linii to XCode, który robi to za Ciebie. Został wstępnie zainstalowany z menedżerem pakietów Alcatraz ...

https://github.com/payliu/XcodePlus

Joakim
źródło
0

Nadal nie ma wbudowanego sposobu na zduplikowanie linii, począwszy od Xcode 9. A niestandardowe wiązania klawiszy wydają się mieć problemy.

Aktualizacja: Xcode 10.0 beta 6 (10L232m) jest taka sama.

erkanyildiz
źródło
0

Przejdź pod ten adres:

/Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources/IDETextKeyBindingSet

a następnie skopiuj plik IDETextKeyBindingSet.plist w jakimś miejscu, a następnie otwórz skopiowany plik i wstaw

selectLine :, copy :, paste :, paste: tak jak na tym obrazku wprowadź opis obrazu tutaj i zapisz go i zastąp skopiowany plik w tym adresie /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources/IDETextKeyBindingSet

następnie uruchom ponownie xcode, otwórz preferencje xcode, przejdź do zakładki przypisywania klawiszy, wyszukaj zduplikowaną linię (dostosowaną) i zdefiniuj dla niej krótki klawisz, jak na poniższym obrazku

[1]: https://i.stack.imgur.com/UTeZu.png

Khatereh
źródło
Z recenzji: Cześć, ten post nie wydaje się stanowić dobrej odpowiedzi na pytanie. Edytuj swoją odpowiedź i popraw ją lub po prostu opublikuj jako komentarz.
sɐunıɔ ןɐ qɐp