Il y a une Duplicate
commande dans le menu Edition (avec un raccourci par défaut de ⌘D), mais elle est (comme Halley l'a souligné) destinée à être dupliquée dans la partie Interface Builder de Xcode.
Alors, comment dupliquez -vous ( facilement ) une ligne dans Xcode 4?
Question connexe (avec une réponse fonctionnelle) pour Xcode 3 ... et qui ne fonctionne pas pour Xcode 4.
Pourquoi ne pas simplement copier et coller?
Parce que c'est fastidieux et implique trop d'acrobaties à la main:
soit (1) : se déplacer au début de la ligne puis appuyer sur ⇧^E, puis copier avec ⌘C, passer à une nouvelle ligne, alligner le curseur et enfin coller avec ⌘V;
ou (2) : ^A(placer le curseur au début de la ligne), ^SPACE(définir la marque), ^E(placer le curseur à la fin de la ligne), ⇧^W( Select to Mark
; personnalisé), copier, nouvelle ligne, etc.
Comme l'a dit Frank Schröder (dans la question connexe ):
Le but n'est PAS d'utiliser les raccourcis Cmd-C / Cmd-V.
Réponses:
Allez dans ce dossier qui contient le côté obscur de la force:
/Developer/Library/PrivateFrameworks/IDEKit.framework/Resources
/Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources
.Ouvrez
IDETextKeyBindingSet.plist
.Ajoutez un nouveau dictionnaire et un nouvel élément de commande comme capture d'écran ci-dessous (nommez-les comme vous le souhaitez):
C'est:
selectLine:, copy:, moveToEndOfLine:, insertNewline:, paste:, deleteBackward:
Redémarrez Xcode et allez dans Préférences - Liaisons de touches, recherchez votre commande.
Définissez une combinaison de touches pour la commande:
Libérez enfin la puissance des raccourcis clavier sur Xcode ... Profitez-en!
la source
/Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources
pointe l'alias. Sinon, j'ai suivi avec succès les étapes de Halley sur la version 4.3.2 ... Je vous suggère de sauvegarder le fichier d'origine, puis de l'ouvrir dans Xcode lui-même (et non dans TextEdit). En outre, en ce qui concerne les autorisations: les modifier (uniquement pour le fichier lui-même; aucune récursivité nécessaire) dans Finder fonctionnait très bien.<key>Custom</key> <dict> <key>Duplicate Current Line</key> <string>selectLine:, copy:, moveToEndOfLine:, insertNewline:, paste:, deleteBackward:</string> </dict>
Mise à jour 2020
Fonctionne aussi sur les versions Xcode: 11.3.1
Fonctionne dans les versions 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
Instruction
pour la version 11.3.1
sous les versions 11.3
pour 11.3.1
pour les versions ci-dessous
Captures d'écran
et Redémarrez Xcode et allez à
Preferences - Key Bindings
, recherchez la commande que nous avons tapée (Duplicate Lines & Duplicate Current Line).C'est tout.
Pour les gens d'Unix à noter: -
la source
IDETextKeyBindingSet.plist
et ajouté le dictionnaire ci-dessus, puis mappé les clés dans les préférences de XCode.Ok, j'ai trouvé ceci:
Version pour XCode 11:
Puisque j'applique ce changement après chaque mise à jour de XCode, j'ai créé un script pour cela. Cela peut peut-être causer des dommages, mais j'ai essayé de le rendre relativement sûr. Il fait une copie du fichier, puis remplace la ligne par sa copie et une commande supplémentaire utilisant perl. Nécessite que XCode soit installé à
/Applications/Xcode.app
Ancienne version (je ne sais pas si la nouvelle est compatible avec les anciennes versions, je la garderai donc ici):
et script pour l'ancienne version pour éviter l'édition manuelle des fichiers:
edit: correction mineure edit2: modification de la sélection de paragraphe edit3: version ajoutée pour XCode 11
la source
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 à partir de mon dépôt GitHub: XcodeKit Plugin - https://github.com/ptfly/XcodeKit
la source
La réponse de @ Hailei était plutôt bonne, mais avait pour effet secondaire malheureux de frapper le contenu du presse-papiers (le laissant rempli avec le contenu de la ligne dupliquée), ce qui est précisément la partie de l'approche manuelle du copier / coller que j'essayais d'éviter .
Donc, j'ai changé la séquence de commandes en ceci:
Les 2
yank:
peuvent ne pas fonctionner comme prévu si vous avezNSTextKillRingSize
défini quelque chose en dehors de1
, mais je suis presque sûr que1
c'est la valeur par défaut, et vous devez faire un travail non trivial pour le changer (cela nécessite l'ajout d'une entrée à~/Library/Preferences/.GlobalPreferences.plist
).la source
defaults write -g NSTextKillRingSize 1
au lieu de jouer avec le GlobalPreferences.plist. ;)moveToBeginningOfLine:, deleteToEndOfLine:, yank:, insertNewline:, setMark:, moveToBeginningOfLine:, selectToMark:, yank:
Pourquoi dupliquer une seule ligne? Il est préférable de dupliquer le paragraphe entier. Ma séquence:
Dupliquer le paragraphe actuel
Supprimer le paragraphe actuel
Fonctionne bien dans Xcode 4.6
la source
Je me demande pourquoi personne n'a mentionné l'utilisation ⌘des touches fléchées ( ←↑→↓) pour à la fois 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 en utilisant ⌘+ ←(au lieu de ctrl+ A), puis en utilisant ⌘+ ⇧+ →(au lieu de ctrl+ ⇧+ E) pour sélectionner toute la ligne jusqu'à la fin, puis copier / coller.
J'ai rencontré d'autres threads 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;)
la source
EDIT: 12 juillet 2020 Après la mise à jour vers Xcode 11.5, mon
duplicate line
entrée de clé duplist
fichier avait disparu. J'ai dû l'ajouter à nouveau. La liaison de clé était toujours là cependant.EDIT: 17 septembre 2019 Après la mise à jour vers Xcode 10.3, mon
duplicate line
entrée de clé duplist
fichier avait disparu. J'ai dû l'ajouter à nouveau. La liaison de clé était toujours là cependant.EDIT: 28 mai 2019 Après la mise à jour vers Xcode 10.2 à nouveau, mon
duplicate line
entrée de clé duplist
fichier avait disparu. J'ai dû l'ajouter à nouveau. La liaison de clé était toujours là cependant.EDIT: 23 décembre 2018 Après la mise à jour vers Xcode 10.1, tous mes raccourcis se sont à nouveau cassés. Mais quelque chose de différent est qu'après la mise à jour du fichier plist pour la duplication de ligne, je n'ai pas eu à définir mes raccourcis clavier, ils étaient déjà là. Étrange.
EDIT: 14 OCT.2018 Xcode 10: Quelqu'un de haut niveau chez Apple aime vraiment copier / coller et s'assure qu'avec chaque version de la mise à jour Xcode, la duplication de ligne est supprimée de l'installation de tout le monde. Nous, les développeurs, avons été extrêmement frustrés par ce non-sens qui se passe dans Xcode depuis toujours, le seul IDE sans option de duplication de ligne. Je viens de mettre à jour vers Xcode 10, et comme vous l'avez deviné - toutes mes touches de raccourci sont supprimées avec ma fonctionnalité de duplication de ligne. Cependant, il est réparable comme dans la réponse originale. Une légère différence cette fois est que vous aurez besoin de la ligne suivante:
EDIT: Xcode 9: J'ai dû refaire mes raccourcis et la duplication et la suppression de lignes, mais la bonne chose est que vous pouvez maintenant modifier à nouveau IDETextKeyBindingSet.plist. Ce gars haut d'Apple 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. Ce gars de haut niveau chez Apple est vraiment déterminé à nous faire utiliser le copier / coller au lieu de la simple duplication de lignes comme dans tous les autres IDE.
EDIT: Xcode 7.1 et il n'y a toujours pas de raccourcis pour la duplication et la suppression de ligne. C'est le seul IDE avec lequel j'ai travaillé sans de tels raccourcis. Et je ne peux pas imaginer la vie d'un développeur sans ces deux raccourcis critiques.
Voici comment cela peut être fait:
Nous devons d'abord modifier un fichier plist qui réside dans le bundle Xcode.app (nécessite sudo pour le modifier)
/Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources/IDETextKeyBindingSet.plist
Ensuite, recherchez
<key>Insertions and Indentations</key>
et sous l'<dict>
étiquette, ajoutez ce qui suit:Ensuite, trouvez les et ceux-ci dans la section
<key>Deletions</key>
sous l'<dict>
étiquette:Maintenant, ouvrez / redémarrez Xcode, allez dans Préférences et allez dans l'onglet «Key Bindings». Utilisez la barre de recherche pour filtrer et rechercher les nouveaux raccourcis. Cliquez ensuite devant la description du raccourci pour lui attribuer un raccourci de votre choix. Assurez-vous que votre raccourci n'est pas en conflit avec les raccourcis existants.
la source
J'envisagerais de réviser la séquence de commandes pour:
L'ajout
deleteToBeginningOfLine
maintient l'indentation de la ligne dupliquée.la source
insertLineBreak avait au moins besoin pour moi de faire une copie sur une nouvelle ligne, sans elle, j'ai une copie sur la même ligne
la source
J'ai eu de gros problèmes 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, accédez au terminal et procédez comme suit:
Peu d'autres moyens possibles de le faire sont également décrits ici .
Ensuite, dans l'éditeur nano, cliquez
^W
et tapez «insertions» pour passer à la partie «Insertions et indentations». Juste sous la<dict>
balise, collez cet extrait de code xml:Appuyez sur
control + X
, puisY
, puisEnter
pour enregistrer le fichier dans nano éditeur.UPD: J'ai trouvé 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):
la source
Voici mes entrées Supprimer ( CTRL+ D) et Dupliquer ( CMD+ SHIFT+ D) 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)
la source
Tous les utilisateurs de texte sublime qui souhaiteraient faire correspondre duplicateLineUp et duplicateLineDown de sublime dans XCode, veuillez ajouter ce qui suit à votre fichier IDETextKeyBindingSet.plist
la source
Dans le cas où quelqu'un d'autre se verrait refuser l'accès à la modification de IDETextKeyBindingSet.plist, vous pouvez vous accorder des autorisations de lecture / écriture en:
la source
Juste pour compléter la réponse de Hailei, les commandes qui fonctionnaient le mieux pour moi étaient:
Ses commandes suggérées copiaient la ligne souhaitée deux lignes ci-dessous, pour moi.
la source
Ligne (s) en double prise en charge. (Cela fonctionne dans Xcode 9.2)
la source
En ce qui concerne Xcode 11, aucune de ces solutions n'a fonctionné pour moi. La première réponse avait un comportement étrange car elle insérait la ligne après la ligne suivante. La réponse suivante, cependant, a fonctionné pour moi.
la source