Não é um Duplicate
comando no menu Editar (com um atalho padrão ⌘D), mas é (como Halley apontou) significou para a duplicação na parte Interface Builder do Xcode.
Então, como você ( facilmente ) duplica uma linha no Xcode 4?
Pergunta relacionada (com uma resposta funcional) para o Xcode 3 ... e que não funciona para o Xcode 4.
Por que não apenas copiar e colar?
Porque é tedioso e implica muitas acrobacias manuais:
quer (1) : mover a linha que se inicia e, em seguida, pressiona ⇧^E, então a cópia com ⌘C, movendo-se a uma nova linha, alligning cursor, e , finalmente, colando com ⌘V;
ou (2) : ^A(ajuste o cursor na linha inicial), ^SPACE(ajuste a marca), ^E(ajuste o cursor na linha final), ⇧^W( Select to Mark
; personalizado), cópia, nova linha, etc.
Como Frank Schröder (na pergunta relacionada ) coloca:
O ponto principal é NÃO usar os atalhos Cmd-C / Cmd-V.
Respostas:
Vá para esta pasta que contém o lado escuro da força:
/Developer/Library/PrivateFrameworks/IDEKit.framework/Resources
/Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources
.Aberto
IDETextKeyBindingSet.plist
.Adicione um novo dicionário e um novo item de comando como a captura de tela abaixo (nomeie-os como quiser):
Isso é:
selectLine:, copy:, moveToEndOfLine:, insertNewline:, paste:, deleteBackward:
Reinicie o Xcode e vá para Preferences - Key Bindings, procure seu comando.
Defina uma combinação de teclas para o comando:
Finalmente, liberou o poder das combinações de teclas no Xcode ... Aproveite!
fonte
/Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources
alias aponta. Caso contrário, segui com êxito as etapas de Halley na versão 4.3.2 ... Sugiro que você faça backup do arquivo original e abra-o no próprio Xcode (e não no TextEdit). Além disso, em relação às permissões: alterá-las (apenas para o próprio arquivo; não é necessária recursão) no Finder funcionou bem.<key>Custom</key> <dict> <key>Duplicate Current Line</key> <string>selectLine:, copy:, moveToEndOfLine:, insertNewline:, paste:, deleteBackward:</string> </dict>
Atualização 2020
Funciona nas versões Xcode: 11.3.1 também
Funciona nas versões 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
Instrução
para a versão 11.3.1
abaixo das versões 11.3
para 11.3.1
para versões abaixo
Screenshots
e Reinicie o Xcode e vá para
Preferences - Key Bindings
, procure o comando digitado (Duplicate Lines & Duplicate Current Line).É isso aí.
Para as pessoas unix notar: -
fonte
IDETextKeyBindingSet.plist
e adicionei o dicionário acima e, em seguida, mapeei as chaves nas Preferências do XCode.Ok, eu vim com isso:
Versão para XCode 11:
Como estou aplicando essa alteração após cada atualização do XCode, criei um script para isso. Possivelmente, pode causar algum dano, mas tentei torná-lo relativamente seguro. Ele faz uma cópia do arquivo e substitui a linha pela sua cópia e comando adicional usando perl. Requer que o XCode seja instalado em
/Applications/Xcode.app
Versão mais antiga (não tenho certeza se a nova é compatível com versões mais antigas, por isso vou mantê-la aqui):
e script para a versão mais antiga para evitar a edição manual de arquivos:
edit: correção menor edit2: alterado para a seleção de parágrafos edit3: versão adicionada para o XCode 11
fonte
Hoje eu escrevi um plugin muito pequeno para o Xcode 5 que exclui e duplica linhas e seleções.
Você pode baixá-lo no repositório GitHub: XcodeKit Plugin - https://github.com/ptfly/XcodeKit
fonte
A resposta de @ Hailei foi muito boa, mas teve o infeliz efeito colateral de prejudicar o conteúdo da área de transferência (deixando-a preenchida com o conteúdo da linha duplicada), que é precisamente a parte da abordagem de copiar / colar manualmente que eu estava tentando evitar .
Então, mudei a sequência de comandos para isto:
Os
yank:
2s podem não funcionar como planejado se você tiverNSTextKillRingSize
definido algo além1
, mas tenho certeza que1
é o padrão, e você deve fazer algum trabalho não trivial para alterá-lo (é necessário adicionar uma entrada a~/Library/Preferences/.GlobalPreferences.plist
).fonte
defaults write -g NSTextKillRingSize 1
vez de jogar com o GlobalPreferences.plist. ;)moveToBeginningOfLine:, deleteToEndOfLine:, yank:, insertNewline:, setMark:, moveToBeginningOfLine:, selectToMark:, yank:
Estou me perguntando por que ninguém mencionou o uso ⌘juntamente com as teclas de seta ( ←↑→↓) para mover o cursor e selecionar linhas inteiras (adicionando ⇧).
Copio regularmente linhas inteiras (duplicadas) movendo o cursor para o início de uma linha usando ⌘+ ←(em vez de ctrl+ A) e depois uso ⌘+ ⇧+ →(em vez de ctrl+ ⇧+ E) para selecionar a linha inteira até o final e depois copio / colo.
Encontrei outros tópicos em que ninguém parece usar esses atalhos de teclado. Eles são globais no OS X e eu os uso o tempo todo! Muito menos acrobacias manuais;)
fonte
EDIT: 12 de julho de 2020 Após a atualização para o Xcode 11.5 novamente, minha
duplicate line
entrada de chave doplist
arquivo desapareceu. Eu tive que adicioná-lo novamente. A ligação das chaves ainda estava lá.EDIT: Sep 17, 2019 Após a atualização para o Xcode 10.3 novamente, minha
duplicate line
entrada de chave doplist
arquivo desapareceu. Eu tive que adicioná-lo novamente. A ligação das chaves ainda estava lá.EDIT: 28 de maio de 2019 Após a atualização para o Xcode 10.2 novamente, minha
duplicate line
entrada de chave doplist
arquivo desapareceu. Eu tive que adicioná-lo novamente. A ligação das chaves ainda estava lá.EDIT: 23 de dezembro de 2018 Após a atualização para o Xcode 10.1, todos os meus atalhos foram interrompidos novamente. Mas algo diferente foi que, depois de atualizar o arquivo plist para duplicação de linha, não precisei definir minhas ligações de teclas, elas já estavam lá. Estranho.
EDIT: 14 DE OUTUBRO DE 2018 Xcode 10: Alguém na Apple adora copiar / colar e garante que, a cada versão da atualização do Xcode, a duplicação de linha seja removida da instalação de todos. Nós, desenvolvedores, ficamos extremamente frustrados com esse absurdo acontecendo no Xcode desde sempre, o único IDE sem opção de duplicação de linha. Acabei de atualizar para o Xcode 10 e, como você adivinhou, todas as minhas teclas de atalho são removidas juntamente com a funcionalidade de duplicação de linha. No entanto, é corrigível como na resposta original. Uma pequena diferença dessa vez é que você precisará da seguinte linha:
Edição: Xcode 9: Eu tive que refazer meus atalhos e duplicação e exclusão de linhas, mas o bom é que agora você pode editar IDETextKeyBindingSet.plist novamente. Esse cara da Apple deve estar de férias quando lançou esta versão.
EDIT: Xcode 8: Buggy, você não pode modificar o arquivo IDETextKeyBindingSet.plist. O Xcode redefine-o no início. Esse cara da Apple está realmente determinado a nos fazer usar copiar / colar em vez da duplicação simples de linha, como em todos os outros IDEs existentes.
EDIT: Xcode 7.1 e ainda não há atalhos para duplicação e exclusão de linhas. Este é o único IDE com o qual já trabalhei sem esses atalhos. E não consigo imaginar a vida de um desenvolvedor sem esses dois atalhos críticos.
Aqui está como isso pode ser feito:
Primeiro, precisamos modificar um arquivo plist que mora dentro do pacote Xcode.app (precisa do sudo para editar)
/Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources/IDETextKeyBindingSet.plist
Em seguida, procure
<key>Insertions and Indentations</key>
e, abaixo da<dict>
tag, adicione o seguinte:Em seguida, encontre oe estes dentro da seção
<key>Deletions</key>
sob a<dict>
tag:Agora abra / reinicie o Xcode, vá para Preferências e vá para a guia "Key Bindings". Use a barra de pesquisa para filtrar e procurar os novos atalhos. Em seguida, clique na frente da descrição do atalho para atribuir a ele um atalho do seu agrado. Verifique se o seu atalho não está em conflito com os atalhos existentes.
fonte
Por que duplicar uma única linha? Duplicar o parágrafo inteiro é melhor. Minha sequência:
Duplicar parágrafo atual
Excluir parágrafo atual
Funciona bem no Xcode 4.6
fonte
Eu consideraria revisar a sequência de comandos para:
O adicionado
deleteToBeginningOfLine
mantém o recuo da linha duplicada.fonte
insertLineBreak precisava pelo menos para eu fazer uma cópia na nova linha, sem ele eu tenho cópia na mesma linha
fonte
Eu tive um grande problema para desbloquear arquivos .plist no MacOS Sierra e no Xcode 9, mesmo a decisão @Tim não funcionou para mim. Se você tiver o mesmo problema, vá para o terminal e faça o seguinte:
Poucas outras maneiras possíveis de fazer isso também são descritas aqui .
Em seguida, no nano editor, clique
^W
e digite 'inserções' para ir para a parte 'Inserções e recuos'. Logo abaixo da<dict>
tag, cole este xml-snippet:Pressione e
control + X
, em seguidaY
,Enter
para salvar o arquivo no nano editor.UPD: Tomei uma decisão melhor, que adiciona uma linha adicional antes da duplicação (útil quando você deseja duplicar uma linha que tem outra linha logo abaixo):
fonte
Aqui estão minhas entradas Excluir ( CTRL+ D) e Duplicar ( CMD+ SHIFT+ D) do meu IDETextKeyBindingSet.plist. (em /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Versions/A/Resources)
Acabei de configurá-los no Xcode 4.6.1 (com base na resposta do usuário570753 acima e em outros lugares)
fonte
Qualquer usuário sublime de texto que gostaria de combinar do sublime duplicateLineUp e duplicateLineDown no XCode, adicione o seguinte ao seu IDETextKeyBindingSet.plist arquivo
fonte
Caso alguém tenha acesso negado a qualquer pessoa para editar o IDETextKeyBindingSet.plist, você poderá obter permissões de leitura / gravação:
fonte
Apenas para complementar a resposta de Hailei, os comandos que funcionaram melhor para mim foram:
Seus comandos sugeridos estavam copiando a linha desejada duas linhas abaixo, para mim.
fonte
Linha (s) duplicada (s) suportada (s). (Isso funciona no Xcode 9.2)
fonte
Quanto ao Xcode 11, nenhuma das opções acima funcionou para mim. A primeira resposta teve um comportamento estranho, pois foi inserida a linha após a próxima. A resposta a seguir, no entanto, funcionou para mim.
fonte