No es un Duplicate
comando en el menú Editar (con un acceso directo por defecto de ⌘D), pero es (como Halley señaló) destinada a la duplicación en la parte Interface Builder 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 solo copiar y pegar?
Porque es tedioso y conlleva demasiadas acrobacias manuales:
o bien (1) : moverse a la línea que comienza y luego presionar ⇧^E, luego copiar con ⌘C, mover a una nueva línea, alinear el cursor y finalmente pegar con ⌘V;
o (2) : ^A(establecer el cursor en el inicio de la línea), ^SPACE(establecer la marca), ^E(establecer el cursor en el final de la línea), ⇧^W( Select to Mark
; personalizado), copiar, nueva línea, etc.
Como dijo Frank Schröder (en la pregunta relacionada ):
El punto NO es usar los atajos de Cmd-C / Cmd-V.
Respuestas:
Vaya a esta carpeta que contiene el lado oscuro de la fuerza:
/Developer/Library/PrivateFrameworks/IDEKit.framework/Resources
/Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources
.Abierto
IDETextKeyBindingSet.plist
.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:
Reinicie Xcode y vaya a Preferencias - Atajos de teclado, busque su comando.
Establezca una combinación de teclas para el comando:
Finalmente, desaté el poder de las combinaciones de teclas en Xcode ... ¡Disfrútalo!
fuente
/Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources
apunta el alias. De lo contrario, he seguido con éxito los pasos de Halley en la versión 4.3.2 ... Le sugiero que haga una copia de seguridad del archivo original y luego lo abra en Xcode (y no en TextEdit). Además, con respecto a los permisos: cambiarlos (solo para el archivo en sí; no se necesita recurrencia) en Finder funcionó bien.<key>Custom</key> <dict> <key>Duplicate Current Line</key> <string>selectLine:, copy:, moveToEndOfLine:, insertNewline:, paste:, deleteBackward:</string> </dict>
Actualización 2020
Funciona en versiones de Xcode: 11.3.1 también
Funciona en versiones de 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
Instrucción
para la versión 11.3.1
por debajo de las versiones 11.3
para 11.3.1
para las siguientes versiones
Capturas de pantalla
y reinicie Xcode y vaya a
Preferences - Key Bindings
, busque el comando que escribimos (Duplicar líneas y Duplicar línea actual).Eso es.
Para que la gente de Unix tenga en cuenta: -
fuente
IDETextKeyBindingSet.plist
y agregué el diccionario anterior y luego asigné las claves en Preferencias de XCode.Ok, se me ocurrió esto:
Versión para XCode 11:
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 comando adicional usando perl. Requiere que XCode se instale en
/Applications/Xcode.app
Versión anterior (no estoy seguro de si la nueva es compatible con versiones anteriores, así que la mantendré aquí):
y script para la versión anterior para evitar la edición manual de archivos:
edit: corrección menor edit2: cambiado a selección de párrafo edit3: versión agregada para XCode 11
fuente
Hoy escribí un complemento muy pequeño para Xcode 5 que elimina y duplica líneas y selecciones.
Puede descargarlo desde mi repositorio de GitHub: XcodeKit Plugin - https://github.com/ptfly/XcodeKit
fuente
La respuesta de @ Hailei fue bastante buena, pero tuvo el desafortunado efecto secundario de golpear 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:
Es posible que los 2
yank:
s no funcionen según lo previsto si haNSTextKillRingSize
establecido algo aparte de1
, pero estoy bastante seguro de que1
es el valor predeterminado, y tiene que hacer un trabajo no trivial para cambiarlo (requiere agregar una entrada~/Library/Preferences/.GlobalPreferences.plist
).fuente
defaults write -g NSTextKillRingSize 1
lugar de jugar con GlobalPreferences.plist. ;)moveToBeginningOfLine:, deleteToEndOfLine:, yank:, insertNewline:, setMark:, moveToBeginningOfLine:, selectToMark:, yank:
Me pregunto por qué nadie ha mencionado usar ⌘junto con las teclas de flecha ( ←↑→↓) tanto para mover el cursor como para seleccionar líneas enteras (agregando ⇧).
Copio regularmente 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 la línea completa hasta el final y luego copiar / pegar.
Me he encontrado con otros hilos en los que nadie parece usar estos atajos de teclado. ¡Son globales en OS X y los uso todo el tiempo! Mucho menos acrobacias manuales;)
fuente
EDITAR: 12 de julio de 2020 Después de actualizar a Xcode 11.5 nuevamente, mi
duplicate line
entrada clave delplist
archivo desapareció. Tuve que agregarlo nuevamente. Sin embargo, la combinación de teclas todavía estaba allí.EDITAR: 17 de septiembre de 2019 Después de actualizar a Xcode 10.3 nuevamente, mi
duplicate line
entrada clave delplist
archivo desapareció. Tuve que agregarlo nuevamente. Sin embargo, la combinación de teclas todavía estaba allí.EDITAR: 28 de mayo de 2019 Después de actualizar a Xcode 10.2 nuevamente, mi
duplicate line
entrada clave delplist
archivo desapareció. Tuve que agregarlo nuevamente. Sin embargo, la combinación de teclas todavía estaba allí.EDITAR: 23 de diciembre de 2018 Después de actualizar a Xcode 10.1, todos mis atajos se volvieron a romper. Pero algo diferente fue que después de actualizar el archivo plist para la duplicación de líneas, no tuve que definir mis asociaciones de teclas, ya estaban allí. Extraño.
EDITAR: 14 DE OCTUBRE DE 2018 Xcode 10: A alguien en Apple le encanta copiar / pegar, y se asegura de que con cada versión de la actualización de Xcode, la duplicación de línea se elimine de la instalación de todos. Los desarrolladores nos hemos sentido extremadamente frustrados por esta tontería que ocurre en Xcode desde siempre, el único IDE sin opción de duplicación de línea. Acabo de actualizar a Xcode 10 y, como lo adivinó, todas mis teclas de acceso directo se eliminan junto con mi funcionalidad de duplicación de línea. Sin embargo, es reparable como en la respuesta original. Una ligera diferencia esta vez es que necesitará la siguiente línea:
EDITAR: Xcode 9: tuve que rehacer mis atajos y la duplicación y eliminación de líneas, pero lo bueno es que ahora puede editar IDETextKeyBindingSet.plist nuevamente. Este chico de Apple debe estar de vacaciones cuando lanzaron esta versión.
EDITAR: Xcode 8: Buggy, no puede modificar el archivo IDETextKeyBindingSet.plist en absoluto. Xcode lo restablece al inicio. Este tipo alto en Apple está realmente decidido a hacernos usar copiar / pegar en lugar de una simple duplicación de línea como en todos los demás IDE que existen.
EDITAR: Xcode 7.1 y todavía no hay atajos para la duplicación y eliminación de líneas. Este es el único IDE con el que he trabajado sin esos atajos. Y no puedo imaginar la vida de un desarrollador sin estos dos atajos críticos.
Así es como se puede hacer:
Primero necesitamos modificar un archivo plist que vive dentro del paquete Xcode.app (necesita sudo para editar)
/Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources/IDETextKeyBindingSet.plist
Luego busque
<key>Insertions and Indentations</key>
y debajo de la<dict>
etiqueta agregue lo siguiente:Luego encuentre el y estos dentro de la sección
<key>Deletions</key>
debajo de la<dict>
etiqueta:Ahora abra / reinicie Xcode, vaya a Preferencias y vaya a la pestaña "Asignaciones de teclas". Use la barra de búsqueda para filtrar y buscar los nuevos atajos. Luego haga clic delante de la descripción del acceso directo para asignarle un acceso directo de su agrado. Asegúrese de que su acceso directo no entre en conflicto con los accesos directos existentes.
fuente
¿Por qué duplicar una sola línea? Duplicar todo el párrafo es mejor. Mi secuencia:
Duplicar el párrafo actual
Eliminar párrafo actual
Funciona bien en Xcode 4.6
fuente
Consideraría revisar la secuencia de comandos para:
El agregado
deleteToBeginningOfLine
mantiene la sangría de la línea duplicada.fuente
insertLineBreak necesitaba al menos para mí hacer una copia en una nueva línea, sin ella obtuve una copia en la misma línea
fuente
Tuve un gran problema para desbloquear el 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 la terminal y haga esto:
Algunas otras formas posibles de hacer esto también se describen aquí .
Luego, en el editor nano, haga clic
^W
y escriba 'inserciones' para saltar a la parte 'Inserciones e indentaciones'. Justo debajo de la<dict>
etiqueta, pegue este fragmento de XML:Presione
control + X
, luegoY
,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):
fuente
Aquí están mis entradas Eliminar ( CTRL+ D) y Duplicar ( CMD+ SHIFT+ D) de mi IDETextKeyBindingSet.plist. (en /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Versions/A/Resources)
Acabo de configurarlos en Xcode 4.6.1 (según la respuesta del usuario575753 anterior y en otros lugares)
fuente
Cualquier usuario de texto sublime que desee hacer coincidir duplicateLineUp y duplicateLineDown de sublime en XCode, agregue lo siguiente a su archivo IDETextKeyBindingSet.plist
fuente
En caso de que a otra persona se le niegue el acceso para editar IDETextKeyBindingSet.plist, puede otorgarse permisos de lectura / escritura al:
fuente
Solo para complementar la respuesta de Hailei, los comandos que funcionaron mejor para mí fueron:
Sus comandos sugeridos copiaban la línea deseada dos líneas a continuación, para mí.
fuente
Línea (s) duplicada (s) compatibles. (Esto funciona en Xcode 9.2)
fuente
En cuanto a Xcode 11, ninguno de los anteriores funcionó para mí. La primera respuesta tuvo un comportamiento extraño, ya que estaba insertando la línea después de la siguiente. La siguiente respuesta, sin embargo, funcionó para mí.
fuente