web-dev-qa-db-fra.com

Xcode duplicate line

There is une commande Duplicate dans le menu Edition (avec un raccourci par défaut de D), mais il est (comme Halley souligné) destiné à être dupliqué dans la partie Interface Builder de Xcode.

Alors, comment pouvez-vous ( facilement) dupliquer une ligne dans Xcode 4?


Question connexe (avec une réponse satisfaisante) pour Xcode 3 ... et qui ne fonctionne pas pour Xcode 4.


Pourquoi ne pas simplement copier et coller?

Parce que c'est fastidieux et que cela implique trop d'acrobaties des mains:

soit (1) : aller au début de la ligne puis appuyer sur ⇧^E, puis copier avec ⌘C, passer à la nouvelle ligne, allumer le curseur, et enfin coller avec ⌘V;

ou (2) ^A (placez le curseur sur le début de la ligne), ^SPACE (marque de repère), ^E (placez le curseur sur la fin de la ligne), ⇧^W (Select to Mark; personnalisé), copie, nouvelle ligne, etc.

Comme Frank Schröder (dans le question connexe ) le dit:

L’important n’est PAS d’utiliser les raccourcis Cmd-C/Cmd-V.

111
Blaz
  1. Allez dans ce dossier qui contient le côté sombre de la force:

    • Xcode 4.2 ou antérieur: /Developer/Library/PrivateFrameworks/IDEKit.framework/Resources
    • Xcode 4.3 ou version ultérieure: /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources.
  2. Ouvrir IDETextKeyBindingSet.plist.

  3. Ajoutez un nouveau dictionnaire et un nouvel élément de commande dans la capture d'écran ci-dessous (nommez-les comme vous le souhaitez): Editing the plist

    C'est: selectLine:, copy:, moveToEndOfLine:, insertNewline:, paste:, deleteBackward:

  4. Redémarrez Xcode et allez dans Préférences - Liaisons de touches, recherchez votre commande.

  5. Définissez une combinaison de touches pour la commande: Key Bindings

  6. Enfin libéré la puissance des raccourcis clavier sur Xcode ... Profitez-en!

164
Hailei

Ajout de lignes en double Fonctionne également pour Xcode version 7.1, 7.3, 7.3.1 8.0, 8.1, 8.2, 8.3 et 9.0, 9.1, 9.2, 10.0, 10.1

Fonctionne en 10.2.1 aussi 2019

Donnez la permission de modifier les fichiers suivants, la plupart du temps, le système d’exploitation ne vous permettra pas de modifier les fichiers.

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

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

Editez le fichier suivant,

/Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Versions/A/Resources/IDETextKeyBindingSet.plist

en écrivant la commande suivante.

open /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Versions/A/Resources/IDETextKeyBindingSet.plist

ajoutez les snipets XML suivants.

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

capture d'écran du fichier édité.

enter image description here

et redémarrez Xcode et allez à Preferences - Key Bindings, recherchez la commande saisie (lignes dupliquées et ligne actuelle dupliquée).

enter image description here

C'est ça.

62
Zumry Mohamed

Aujourd'hui, j'ai écrit un très petit plugin pour Xcode 5 qui supprime et duplique les lignes et les sélections.

Vous pouvez le télécharger depuis mon dépôt GitHub: Plugin XcodeKit - https://github.com/ptfly/XcodeKit

17
peerless

La réponse de @ Hailei était plutôt bonne, mais avait le malheureux effet secondaire de boucher le contenu du presse-papiers (le laissant rempli avec le contenu de la ligne dupliquée), qui est précisément la partie de l'approche copier/coller manuelle que j'essayais d'éviter. .

Donc, j'ai changé la séquence de commande en ceci:

moveToBeginningOfLine:,
deleteToEndOfLine:,
yank:,
insertNewline:,
moveToBeginningOfLine:,
yank:

Les deux yank:s ne fonctionnera peut-être pas comme prévu si vous avez NSTextKillRingSize réglé sur autre chose que 1, mais je suis presque sûr que 1 est la valeur par défaut et vous devez effectuer un travail non trivial pour le changer (il faut ajouter une entrée à ~/Library/Preferences/.GlobalPreferences.plist).

13
Kelan

Pourquoi dupliquer une seule ligne? Dupliquer tout le paragraphe est préférable. Ma séquence:

paragraphe actuel en double

selectParagraph:,
delete:,
yank:,
moveToBeginningOfParagraph:,
yank:,
moveUp:,
moveToEndOfParagraph:

Supprimer le paragraphe actuel

selectParagraph:,
delete:,
moveUp:,
moveToEndOfParagraph:

Fonctionne bien dans Xcode 4.6

8
BB9z

EDIT: 28 mai 2019 Après la mise à jour vers Xcode 10.2, mes raccourcis ont disparu. Je devais les ajouter à nouveau.

EDIT: 23 déc. 2018 Après la mise à jour vers Xcode 10.1, tous mes raccourcis ont été rompus. Mais quelque chose de différent était qu'après la mise à jour du fichier plist pour la duplication de ligne, je n'avais pas à définir mes raccourcis clavier, ils étaient déjà là. Étrange.

EDIT: 14 octobre 2018 Xcode 10: Quelqu'un de haut placé à Apple aime vraiment copier/coller et s'assure qu’avec chaque version de la mise à jour Xcode, la duplication de ligne soit supprimée de l’installation de tout le monde. Nous avons été extrêmement frustrés par cette absurdité qui règne depuis toujours dans Xcode, le seul IDE sans option de duplication de ligne Je viens de mettre à jour Xcode 10 et, comme vous l’avez deviné, toutes mes touches de raccourci sont supprimées, ainsi que ma fonctionnalité de duplication de ligne. Cependant, elle est réparable comme dans la réponse originale. Une légère différence cette fois-ci est que vous aurez besoin de ce qui suit ligne:

<string>selectLine:, copy:, moveToBeginningOfLine:, paste:, moveToEndOfLine:</string>

EDIT: Xcode 9: Je devais refaire mes raccourcis et ma duplication et ma suppression de ligne, mais la bonne chose est que vous pouvez maintenant éditer IDETextKeyBindingSet.plist à nouveau. Ce haut Apple gars doit être en vacances quand ils ont publié cette version.

EDIT: Xcode 8: Buggy, vous ne pouvez pas du tout modifier le fichier IDETextKeyBindingSet.plist. Xcode le réinitialise au démarrage. Cet homme de haut niveau chez Apple) est vraiment déterminé à nous faire utiliser le copier/coller à la place de la simple duplication de ligne, comme dans tous les autres environnements de développement intégrés.

EDIT: Xcode 7.1 et il n’existe toujours aucun raccourci pour la duplication et la suppression de lignes. C’est le seul IDE avec lequel j'ai jamais travaillé sans ces raccourcis. Et je ne peux pas imaginer la vie d’un développeur sans ces deux raccourcis essentiels.

Sur la base de ce que j'ai lu, j'ai configuré mon Xcode pour ces raccourcis et blogué à ce sujet à l'adresse suivante: http://jixte.com/2016/03/30/line-duplicate-and-deletion-in-xcode -7-x /

Voici comment cela peut être fait:

Nous devons d’abord modifier un fichier plist situé dans le bundle Xcode.app (il faut que Sudo l’édite)

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

Ensuite, recherchez <key>Insertions and Indentations</key> Et ajoutez sous la balise <dict>:

<key>Insert New Line Below</key>
<string>moveToEndOfLine:, insertNewline:</string>
<key>Insert New Line Above</key>
<string>moveUp:, moveToEndOfLine:, insertNewline:</string>
<key>Duplicate Current Line</key>
<string>selectLine:, copy:, moveToEndOfLine:, insertNewline:, paste:, deleteBackward:</string>

Ensuite, recherchez le et ceux-ci à l'intérieur de la section <key>Deletions</key> Sous la balise <dict>:

<key>Delete Current Line</key>
<string>selectLine:, delete:</string>
<string>selectLine:, delete:</string>

enter image description here

Maintenant, ouvrez/redémarrez Xcode, allez dans Préférences et allez dans l’onglet “Reliure clavier”. Utilisez la barre de recherche pour filtrer et rechercher les nouveaux raccourcis. Cliquez ensuite devant la description du raccourci pour lui attribuer un raccourci à votre goût. Assurez-vous que votre raccourci n'entre pas en conflit avec les raccourcis existants.

enter image description here

8
zeeshan

Je me demande pourquoi personne n'a mentionné l'utilisation de  avec les touches fléchées () pour déplacer le curseur et sélectionner des lignes entières (en ajoutant ).

Je copie régulièrement des lignes entières (dupliquer) en déplaçant le curseur au début d'une ligne à l'aide de + (au lieu de ctrl+A) et ensuite utiliser ++ (au lieu de ctrl++E) pour sélectionner la ligne entière à la fin puis copier/coller.

J'ai rencontré d'autres discussions où personne ne semble utiliser ces raccourcis clavier. Ils sont globaux sous OS X et je les utilise tout le temps! Beaucoup moins d'acrobaties à la main;)

8
Baldur

Ok, j'ai proposé ceci:

selectParagraph:, delete:, yank:, moveToBeginningOfLine:, setMark:, yank:, moveToBeginningOfLine:, moveLeft:, selectToMark:
  • ne touche pas le presse-papier
  • fonctionne avec plusieurs lignes
  • sélectionne les lignes ajoutées, peut donc être utilisé plusieurs fois sans resélectionner

Puisque j'applique ce changement après chaque mise à jour XCode, j'ai créé un script pour cela. Cela peut éventuellement causer des dommages, mais j'ai essayé de le rendre relativement sûr. Il crée une copie du fichier, puis remplace line par sa copie et sa commande supplémentaire à l'aide de Perl.

cp /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources/IDETextKeyBindingSet.plist ~/Desktop/IDETextKeyBindingSet.plist; Sudo Perl -pi -e 's/\<string\>selectWord:\<\/string>/'$'\<string\>selectWord:\<\/string\>\n\t\t\<key\>Duplicate Selection\<\/key\>\n\t\t\<string\>selectParagraph:, delete:, yank:, moveToBeginningOfLine:, setMark:, yank:, moveToBeginningOfLine:, moveLeft:, selectToMark:\<\/string>/g' /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources/IDETextKeyBindingSet.plist

edit: correction mineure edit2: changé en sélection de paragraphe

7
Rychu

J'envisagerais de réviser la séquence de commande pour:

selectLine:,
copy:,
moveToEndOfLine:,
insertNewline:,
deleteToBeginningOfLine:,
paste:,
moveToBeginningOfLine:, 
deleteBackward:

Le deleteToBeginningOfLine ajouté conserve l'indentation de la ligne dupliquée.

3
user570753

insertLineBreak avait besoin au moins pour moi de faire une copie sur une nouvelle ligne, sans elle, je l'ai copie sur la même ligne

2
Vladimir Kruglov

J'ai eu un gros problème pour déverrouiller le fichier .plist sur MacOS Sierra et Xcode 9, même la décision @Tim n'a pas fonctionné pour moi. Si vous rencontrez le même problème, allez au terminal et procédez comme suit:

cd /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Versions/A/Resources/
Sudo chmod -R 777 *
nano IDETextKeyBindingSet.plist

Quelques autres moyens possibles de faire cela sont également décrits ici .

Ensuite, dans nano editor, cliquez sur ^W Et tapez "insertions" pour accéder à la partie "Insertions and Indentations". Un peu moins de la balise <dict> Collez cet extrait xml:

<key>Duplicate line</key>
<string>selectLine:, copy:, moveToEndOfLine:, insertNewLine:, paste:, deleteBackward:</string>

Appuyez sur control + X, Puis sur Y, puis sur Enter pour enregistrer le fichier dans l'éditeur nano.

UPD: J'ai pris une meilleure décision, qui ajoute une ligne supplémentaire avant la duplication (utile lorsque vous souhaitez dupliquer une ligne qui a une autre ligne juste en dessous):

<key>Duplicate line</key>
<string>selectLine:, copy:, moveToEndOfLine:, insertLineBreak:, moveUp:, paste:, moveToBeginningOfLine:</string>
2
joliejuly

Voici mon effacer (CTRL+D) et dupliquer (CMD+SHIFT+D) entrées de mon IDETextKeyBindingSet.plist. (dans /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Versions/A/Resources)

Je viens de les configurer dans Xcode 4.6.1 (basé sur la réponse de user570753 ci-dessus et ailleurs)

    <key>Custimozed</key>
<dict>
    <key>Delete Current Line</key>
    <string>deleteToBeginningOfLine:, moveToEndOfLine:, deleteToBeginningOfLine:, deleteBackward:, moveDown:, moveToBeginningOfLine:</string>
    <key>Duplicate Current Line</key>
    <string>selectLine:, copy:, moveToEndOfLine:, insertNewline:, deleteToBeginningOfLine:, paste:, moveToBeginningOfLine:, deleteBackward:</string>
</dict>
1
Rob
<key>Duplicate Lines</key>    
<string>selectLine:, copy:, moveToBeginningOfLine:, paste:</string>

Ligne en double prise en charge. (Cela fonctionne dans Xcode 9.2)

0
Luminoid

Si quelqu'un d'autre se voit refuser l'accès à la modification de IDETextKeyBindingSet.plist, vous pouvez vous accorder des autorisations de lecture/écriture en:

Sudo chmod 777 /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Versions/A/Resources/IDETextKeyBindingSet.plist
0
Tim

Tous les utilisateurs de texte sublime qui souhaiteraient faire correspondre le fichier duplicateLineUp et duplicateLineDown au code X de sublime, veuillez ajouter le texte suivant à votre fichier IDETextKeyBindingSet.plist

<key>Line Duplications</key>
<dict>
    <key>Duplicate Current Line Above</key>
    <string>selectLine:, copy:, moveToEndOfLine:, insertNewline:, paste:, deleteBackward:, moveUp:</string>
    <key>Duplicate Current Line Below</key>
    <string>selectLine:, copy:, moveToEndOfLine:, insertNewline:, paste:, deleteBackward:</string>
</dict>
0
internet-nico

Pour compléter la réponse de Hailei, les commandes qui ont fonctionné le mieux pour moi étaient les suivantes:

selectLine:, copy:, moveRight:, moveLeft:, insertNewline:, paste:, deleteBackward:

Ses commandes suggérées copiaient la ligne souhaitée deux lignes plus bas, pour moi.

0
Rod