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.



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


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)


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


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


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ę.

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


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


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>


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


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 ^^


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.


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)

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>



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ź.


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


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


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.


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ę


0

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



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.


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


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
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.