xip update mac instalar for app xcode4 keyboard-shortcuts xcode5 key-bindings duplication

xcode4 - update - xcode for free



Línea duplicada de Xcode (16)

Hay un comando Duplicate en el Menú de Edición (con un atajo predeterminado de D ), pero es (como señaló Halley ) destinado a la duplicación en la parte del Constructor de Interfaz de Xcode.

Entonces, ¿cómo duplica ( fácilmente ) una línea en Xcode 4?

Pregunta relacionada (con una respuesta de trabajo) para Xcode 3 ... y que no funciona para Xcode 4.

¿Por qué no simplemente copiar y pegar?

Porque es tedioso e implica demasiadas acrobacias manuales:

cualquiera (1) : moviéndose al principio de la línea y luego presionando ⇧ ^ E , luego copiando con ⌘C , moviéndose a la nueva línea, alineando el cursor, y finalmente pegando con ⌘V ;

o (2) : ^ A (ajuste el cursor en el inicio de la línea), ^ ESPACIO (ajuste la marca), ^ E (ajuste el cursor en el final de la línea), ⇧ ^ W ( Select to Mark marcar; personalizado), copia, nueva línea, etc.

Como Frank Schröder (en la pregunta relacionada ) lo expresó:

El objetivo no es usar los atajos Cmd-C / Cmd-V.


Adición de líneas duplicadas Funciona para Xcode versión 7.1, 7.3, 7.3.1 8.0, 8.1, 8.2, 8.3 y 9.0, 9.1, 9.2 también

Proporcione persistencia para editar los siguientes archivos. La mayoría de las veces, el sistema operativo no le permitirá editar los archivos.

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

Edite el siguiente archivo

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

escribiendo el siguiente comando.

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

añada los siguientes snipets xml.

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

captura de pantalla del archivo editado.

y reinicie Xcode y vaya a Preferences - Key Bindings , busque el comando que escribimos (Duplicar líneas y Duplicar línea actual).

Eso es.


  1. Vaya a esta carpeta que contiene el lado oscuro de la fuerza:
    • Xcode 4.2 o /Developer/Library/PrivateFrameworks/IDEKit.framework/Resources anteriores: /Developer/Library/PrivateFrameworks/IDEKit.framework/Resources
    • Xcode 4.3: No sé, tal vez sea / /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources / /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources . No tengo la máquina Lion disponible en este momento ... Lo veré cuando tenga una oportunidad más adelante.
  2. Abra IDETextKeyBindingSet.plist .
  3. Agregue un nuevo diccionario y un nuevo elemento de comando como la captura de pantalla a continuación (asígneles el nombre que desee):

    Eso es: selectLine:, copy:, moveToEndOfLine:, insertNewline:, paste:, deleteBackward:

  4. Reinicia Xcode y ve a Preferences - Key Bindings, busca tu comando.

  5. Establezca una combinación de teclas para el comando:

  6. Finalmente desató el poder de las asociaciones de teclas en Xcode ... ¡Disfrútalo!


¿Por qué duplicar una sola línea? Duplicar todo el párrafo es mejor. Mi secuencia:

Párrafo actual duplicado

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

Eliminar el párrafo actual

selectParagraph:, delete:, moveUp:, moveToEndOfParagraph:

Funciona bien en Xcode 4.6


Aquí están mis entradas Delete ( CTRL + D ) y Duplicate ( CMD + SHIFT + D ) de mi IDETextKeyBindingSet.plist. (en /Aplicaciones/Xcode.app/Contents/Frameworks/IDEKit.framework/Versions/A/Resources)

Simplemente configuré esto en Xcode 4.6.1 (basado en la respuesta del usuario570753 anterior y en otros lugares)

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


Consideraría revisar la secuencia de comandos para:

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

El agregado deleteToBeginningOfLine mantiene la sangría de la línea duplicada.


Cualquier usuario de texto sublime que desee hacer coincidir sublime''s duplicateLineUp y duplicateLineDown en XCode, por favor agregue lo siguiente a su archivo 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>


En caso de que a alguien se le niegue el acceso para editar IDETextKeyBindingSet.plist, puede otorgarse permisos de lectura / escritura de la siguiente manera:

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



La respuesta de @ Hailei fue bastante buena, pero tuvo el desafortunado efecto secundario de pinchar el contenido del portapapeles (dejándolo poblado con el contenido de la línea duplicada), que es precisamente la parte del enfoque manual copiar / pegar que estaba tratando de evitar .

Entonces, cambié la secuencia de comandos a esto:

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

Los 2 yank: s pueden no funcionar como se espera si tienes NSTextKillRingSize configurado en algo aparte de 1 , pero estoy bastante seguro 1 que 1 es el predeterminado, y tienes que hacer un trabajo no trivial para cambiarlo (se requiere agregar un entrada a ~/Library/Preferences/.GlobalPreferences.plist ).


Me pregunto por qué nadie ha mencionado el uso de junto con las teclas de flecha ( ) para mover el cursor y seleccionar líneas enteras (agregando ).

Regularmente copio líneas enteras (duplicadas) moviendo el cursor al comienzo de una línea usando + (en lugar de ctrl + A ) y luego uso + + (en lugar de ctrl + + E ) para seleccionar el todo línea al final y luego copiar / pegar.

Me encontré con otros hilos donde nadie parece usar estos atajos de teclado. ¡Son globales en OS X y los utilizo todo el tiempo! Mucho menos acrobacias a mano;)


Ok, he pensado en esto:

selectParagraph:, delete:, yank:, moveToBeginningOfLine:, setMark:, yank:, moveToBeginningOfLine:, moveLeft:, selectToMark:

  • no toca el portapapeles
  • trabaja con múltiples líneas
  • selecciona líneas adicionales, por lo que puede usarse varias veces sin volver a seleccionar

Como estoy aplicando este cambio después de cada actualización de XCode, hice un script para eso. Posiblemente pueda causar algún daño, pero he tratado de hacerlo relativamente seguro. Hace una copia del archivo, y luego reemplaza la línea con su copia y un comando adicional usando 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

editar: corrección menor edit2: cambiar a selección de párrafo


Solo para complementar la respuesta de Hailei, los comandos que funcionaron mejor para mí fueron:

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

Sus comandos sugeridos fueron copiar la línea deseada dos líneas a continuación, para mí.


Tuve un gran problema para desbloquear el archivo .plist en MacOS Sierra y Xcode 9, incluso la decisión @Tim no funcionó para mí. Si tiene el mismo problema, vaya a la terminal y haga esto:

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

Algunas otras formas posibles de hacer esto también se describen here .

Luego, en el editor nano, haga clic en ^W y escriba ''inserciones'' para saltar a la parte ''Inserciones y sangrías''. Justo debajo de la etiqueta <dict> pegue este fragmento xml:

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

Presione control + X , luego Y , luego Enter para guardar el archivo en el editor nano.

UPD: se me ocurrió una mejor decisión, que agrega una línea adicional antes de la duplicación (útil cuando quieres duplicar una línea que tiene otra línea justo debajo):

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


Xcode 7.1 y aún no hay atajos para la duplicación y eliminación de líneas. Este es el único IDE con el que he trabajado sin atajos. Y no puedo imaginar la vida de un desarrollador sin estos dos atajos críticos.

En base a lo que he leído, configuré mi Xcode para estos accesos directos y publiqué sobre ello en: http://jixte.com/2016/03/30/line-duplicate-and-deletion-in-xcode-7-x/

Aquí es cómo se puede hacer:

Primero debemos modificar un archivo plist que viva dentro del paquete Xcode.app (necesita sudo para editarlo)

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

La búsqueda de <key>Insertions and Indentations</key> y debajo de la etiqueta <dict> agrega lo siguiente:

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

A continuación, encuentre el y estos dentro de la sección <key>Deletions</key> debajo de la etiqueta <dict> :

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

Ahora abra / reinicie Xcode, vaya a Preferencias y vaya a la pestaña "Enlaces clave". Use la barra de búsqueda para filtrar y buscar los nuevos accesos directos. A continuación, haga clic en frente de la descripción del atajo para asignarle un atajo de su agrado. Asegúrese de que su acceso directo no entre en conflicto con los accesos directos existentes.


insertLineBreak necesitaba al menos para mí hacer una copia en una nueva línea, sin ella obtuve una copia en la misma línea


<key>Duplicate Lines</key> <string>selectLine:, copy:, moveToBeginningOfLine:, paste:<string>

Líneas duplicadas compatibles. (Esto funciona en Xcode 9.2)