Xcode línea duplicada


Hay un comando Duplicate en el menú Editar (con un acceso directo predeterminado de D ), pero es (como Halley señaló) destinado a la duplicación en la parte del Creador de interfaces de Xcode.

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


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


¿Por qué no simplemente copiar & ¿pasta?

Porque es tedioso y conlleva demasiadas acrobacias manuales:

Bien (1): mover a la línea que comienza y luego presionar ^ ^ E , luego copiar con C C , mover a una nueva línea, alinear el cursor, y finalmente pegar con V V ;

O (2): ^A (establecer el cursor a la línea inicial), ^SPACE (establecer marca), ^E (establecer el cursor a la línea final), ^ ^ W (Select to Mark; modificado para requisitos particulares), copia, nueva línea, sucesivamente.

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

El punto es NO usar los atajos Cmd-C/Cmd-V.

Author: Community, 2012-04-22

16 answers

  1. Vaya a esta carpeta que contiene el lado oscuro de la fuerza:

    • Xcode 4.2 o anterior: /Developer/Library/PrivateFrameworks/IDEKit.framework/Resources
    • Xcode 4.3 o posterior: /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources.
  2. Abrir IDETextKeyBindingSet.plist.

  3. Agregue un nuevo diccionario y un nuevo elemento de comando como la captura de pantalla a continuación (nómbrelos como desee): Editando el plist

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

  4. Reinicie Xcode y vaya a Preferencias-Enlaces de teclas, busque su comando.

  5. Establecer una combinación de teclas para el comando: Fijaciones de Teclas

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

 153
Author: Hailei,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-11 10:16:15

Agregar líneas duplicadas Funciona para la versión Xcode 7.1 , 7.3, 7.3.1 8.0 , 8.1, 8.2, 8.3 Y 9.0, 9.1, 9.2 también

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

introduzca la descripción de la imagen aquí

Y reiniciar Xcode e ir para Preferences - Key Bindings, busque el comando que escribimos (Duplicar Líneas y Duplicar Línea actual).

introduzca la descripción de la imagen aquí

Eso es todo.

 48
Author: Zumry Mohamed,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-29 11:39:27

Hoy escribí un plugin muy pequeño para Xcode 5 que elimina y duplica líneas y selecciones.

Puedes descargarlo desde mi repositorio de GitHub: XcodeKit Plugin - https://github.com/ptfly/XcodeKit

 17
Author: peerless,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-11-20 15:13:32

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

Entonces, cambié la secuencia de comandos a esto:

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

Las 2 yank:s podrían no funcionar como se pretendía si tienes NSTextKillRingSize establecido en algo aparte de 1, pero estoy bastante seguro de que 1 es el valor predeterminado, y tienes que hacer algún trabajo no trivial para cambiarlo (requiere agregar una entrada a ~/Library/Preferences/.GlobalPreferences.plist).

 12
Author: Kelan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-11-13 22:04:57

Me pregunto por qué nadie ha mencionado el uso de junto con las teclas de flecha () para mover el cursor y para seleccionar todas las líneas (mediante la adición de ).

Regularmente copiar líneas enteras (por duplicado) moviendo el cursor al principio de una línea con + (en lugar de ctrl+Un) y, a continuación, utilizar ++ (en lugar de ctrl++E) para seleccionar toda la línea hasta el final y luego copiar / pegar.

Me he encontrado con otros hilos donde nadie parece usar estos atajos de teclado. Son globales en OS X y los uso todo el tiempo! Mucho menos acrobacias manuales;)

 7
Author: Baldur,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-10-09 16:56:01

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

Duplicar el Párrafo actual

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

Suprímase el Párrafo actual

selectParagraph:,
delete:,
moveUp:,
moveToEndOfParagraph:

Funciona bien en Xcode 4.6

 6
Author: BB9z,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-17 06:28:06

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.

 3
Author: user570753,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-09-28 11:42:50

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

Basado en lo que he leído, configuré mi Xcode para estos atajos y escribí sobre ello en: http://jixte.com/2016/03/30/line-duplicate-and-deletion-in-xcode-7-x /

Así es como se puede hacer:

Primero necesitamos modificar una plist archivo que vive dentro del Xcode.paquete de aplicaciones (necesita sudo para editar)

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

La búsqueda de <key>Insertions and Indentations</key> y debajo de la etiqueta <dict> añadir 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>

Luego encuentra el y estos dentro de la sección <key>Deletions</key> bajo la etiqueta <dict>:

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

introduzca la descripción de la imagen aquí

Ahora Abra/reinicie Xcode, vaya a Preferencias y vaya a la pestaña "Enlaces de teclas". Utilice la barra de búsqueda para filtrar y buscar para los nuevos atajos. A continuación, haga clic delante de la descripción del acceso directo para asignarle un acceso directo de su agrado. Asegúrate de que tu atajo no entre en conflicto con los atajos existentes.

introduzca la descripción de la imagen aquí

 3
Author: zeeshan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-17 18:52:45

Ok, se me ocurrió esto:

selectParagraph:, delete:, yank:, moveToBeginningOfLine:, setMark:, yank:, moveToBeginningOfLine:, moveLeft:, selectToMark:
  • no toca el portapapeles
  • funciona con múltiples líneas
  • selecciona las líneas agregadas, por lo que se pueden usar varias veces sin volver a seleccionar

Ya que estoy aplicando este cambio después de cada actualización de XCode, he hecho un script para eso. Posiblemente puede causar algún daño, pero he tratado de hacerlo relativamente seguro. Hace una copia del archivo, y luego reemplaza line con su copia y 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: cambiado a selección de párrafo

 3
Author: Rychu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-31 22:15:17

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

 2
Author: Vladimir Kruglov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-06 21:04:17

Tuve un gran problema para desbloquear .archivo plist en macOS Sierra y Xcode 9, incluso la decisión de @Tim no funcionó para mí. Si tiene el mismo problema, vaya a 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 aquí.

Luego en nano editor 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 de código 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 nano editor.

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

<key>Duplicate line</key>
<string>selectLine:, copy:, moveToEndOfLine:, insertLineBreak:, moveUp:, paste:, moveToBeginningOfLine:</string>
 2
Author: joliejuly,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-18 16:34:01

Aquí está mi Delete (CTRL+D) y Duplicar (CMD+CAMBIO+D) las entradas de mi IDETextKeyBindingSet.plist. (en / Applications / Xcode.app / Contents / Frameworks / IDEKit.framework/Versions/A/Resources )

Acabo de configurarlos en Xcode 4.6.1 (basado en la respuesta de user570753 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>
 1
Author: Rob,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-07-04 15:49:30

Cualquier usuario de sublime text que desee hacer coincidir los duplicateLineUp y duplicateLineDown de sublime en XCode, agregue lo siguiente a su IDETextKeyBindingSet.plist file

<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
Author: internet-nico,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-05 21:35:24

En caso de que a alguien más se le niegue el acceso a editar IDETextKeyBindingSet.plist usted puede darse permisos de lectura / escritura por:

sudo chmod 777 /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Versions/A/Resources/IDETextKeyBindingSet.plist
 0
Author: Tim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-21 14:41:34

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

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

Sus órdenes sugeridas fueron copiar la línea deseada dos líneas más abajo, para mí.

 0
Author: Rod,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-18 15:54:24
<key>Duplicate Lines</key>    
<string>selectLine:, copy:, moveToBeginningOfLine:, paste:</string>

Duplicar línea(s) compatible. (Esto funciona en Xcode 9.2)

 0
Author: Luminoid,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-17 06:48:47