145

編集メニューにコマンドありDuplicateます (デフォルトのショートカットは⌘</kbd>D), but it is (as Halley pointed out) meant for duplication in the Interface Builder part of Xcode.

では、Xcode 4 で行を (簡単に) 複製するにはどうすればよいでしょうか?


Xcode 3の関連する質問(有効な回答付き)...およびXcode 4では機能しない.


コピー&ペーストだけではないのはなぜですか?

それは退屈で、手のアクロバットが多すぎるためです。

(1) : 行頭に移動して を押し⇧^E、次に でコピー、⌘C新しい行に移動し、カーソルを合わせ、最後にで貼り付けます⌘V

または(2) : ^A(カーソルを行頭に^SPACE設定)、(マークを設定)、^E(カーソルを行末に設定)、⇧^W( Select to Mark; カスタマイズ)、コピー、改行など

フランク・シュレーダーが(関連する質問で)述べたように:

全体のポイントは、Cmd-C/Cmd-V ショートカットを使用しないことです。

4

18 に答える 18

189
  1. フォースの暗黒面を含むこのフォルダーに移動します。

    • Xcode 4.2 以前:/Developer/Library/PrivateFrameworks/IDEKit.framework/Resources
    • Xcode 4.3 以降: /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources.
  2. 開くIDETextKeyBindingSet.plist

  3. 以下のスクリーンショットのように、新しい辞書と新しいコマンド項目を追加します (好きな名前を付けてください)。 plist の編集

    それは:selectLine:, copy:, moveToEndOfLine:, insertNewline:, paste:, deleteBackward:

  4. Xcode を再起動し、Preferences - Key Bindings に移動して、コマンドを検索します。

  5. コマンドのキーの組み合わせを設定します。 キーバインディング

  6. 最後に、Xcode でキー バインドの力を解き放ちました...お楽しみください!

于 2012-04-27T07:31:20.090 に答える
113

2020年アップデート

Xcode バージョンで動作: 11.3.1 も

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

命令

  1. 次のファイルを編集する権限を付与します。ほとんどの場合、OS ではファイルを編集できません。

11.3.1 バージョンの場合

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

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

11.3未満のバージョン


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

sudo chmod 777 /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources/
  1. 次のコマンドを記述して、ファイルを編集します: (可能であれば、Sublime またはテキスト エディターで開きます)

11.3.1の場合

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

以下のバージョンの場合

open /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Versions/A/Resources/IDETextKeyBindingSet.plist
  1. 次の xml スニペットを追加します。
<key>custom</key>
<dict>
    <key>Duplicate Current Line</key>
    <string>moveToBeginningOfLine:, deleteToEndOfLine:, yank:, insertNewline:, moveToBeginningOfLine:, yank:</string>
    <key>Duplicate Lines</key>
    <string>selectLine:, copy:, moveToEndOfLine:, insertNewline:, paste:, deleteBackward:</string>
    <key>Delete Line</key>
    <string>selectLine:, deleteBackward:</string>
</dict>

スクリーンショット

ここに画像の説明を入力

Xcode を再起動して に移動しPreferences - Key Bindings、入力したコマンド (Duplicate Lines&Duplicate Current Line) を検索します。

ここに画像の説明を入力

それでおしまい。

Unix の人が注意すること:-

sudo chmod 755 /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Versions/A/Resources/ 
于 2015-12-10T06:51:26.447 に答える
27

わかりました、私はこれを思いつきました:

XCode 11 のバージョン:

selectParagraph:, delete:, undo:, moveRight:, yankAndSelect:
  • クリップボードに触れない
  • 複数の行で動作します
  • 追加された行を選択するため、再選択せずに複数回使用できます
  • XCode 11 での固定選択
  • 元に戻すとより効果的

XCode を更新するたびにこの変更を適用しているので、そのためのスクリプトを作成しました。多少の損害を与える可能性はありますが、比較的安全になるように努めています。ファイルのコピーを作成し、行をそのコピーと perl を使用した追加のコマンドに置き換えます。XCode をインストールする必要があります/Applications/Xcode.app

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:, undo:, moveRight:, yankAndSelect:\<\/string>/g' /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources/IDETextKeyBindingSet.plist

古いバージョン (新しいバージョンが古いバージョンと互換性があるかどうかわからないので、ここに残しておきます):

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

手動のファイル編集を避けるための古いバージョンのスクリプト:

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

edit: 軽微な修正 edit2: 段落選択に変更 edit3: XCode 11 のバージョンを追加

于 2016-12-13T12:40:57.420 に答える
17

今日、行と選択を削除および複製する Xcode 5 用の非常に小さなプラグインを作成しました。

私の GitHub リポジトリからダウンロードできます: XcodeKit プラグイン - https://github.com/ptfly/XcodeKit

于 2013-11-20T15:13:32.420 に答える
15

編集: 2020 年 7 月 12 日 Xcode 11.5 に更新した後、ファイルduplicate lineからのキー エントリが再び失われました。plist再度追加する必要がありました。ただし、キーバインディングはまだそこにありました。

編集: 2019 年 9 月 17 日 Xcode 10.3 に更新した後、ファイルduplicate lineからのキー エントリが再び失われました。plist再度追加する必要がありました。ただし、キーバインディングはまだそこにありました。

編集: 2019 年 5 月 28 日 Xcode 10.2 に更新した後、ファイルduplicate lineからのキー エントリが再び失われました。plist再度追加する必要がありました。ただし、キーバインディングはまだそこにありました。

編集: 2018 年 12 月 23 日 Xcode 10.1 に更新した後、すべてのショートカットが再び壊れました。しかし、行の複製のために plist ファイルを更新した後、キー バインドを定義する必要がなくなりました。キー バインドは既に存在していました。変。

編集: 2018 年 10 月 14 日 Xcode 10: Apple の上層部の誰かが本当にコピー/貼り付けを愛し、Xcode の更新のすべてのバージョンで、行の重複が全員のインストールから削除されるようにします。私たち開発者は、行複製オプションのない唯一の IDE である Xcode で永遠に続くこのナンセンスに非常に不満を感じてきました。Xcode 10 に更新したところ、ご想像のとおり、すべてのショートカット キーが削除され、行の複製機能も削除されました。ただし、元の回答のように修正可能です。今回のわずかな違いは、次の行が必要になることです。

<key>Duplicate Current Line</key>
<string>selectLine:, copy:, moveToBeginningOfLine:, paste:, moveToEndOfLine:</string>

編集: Xcode 9: ショートカットと行の複製と削除をやり直さなければなりませんでしたが、IDETextKeyBindingSet.plist をもう一度編集できるようになったのは良いことです。彼らがこのバージョンをリリースしたとき、この高位の Apple の男は休暇中だったにちがいありません。

編集: Xcode 8: バグ、IDETextKeyBindingSet.plist ファイルをまったく変更できません。Xcode は、開始時にそれをリセットします。Apple のこの高官は、他のすべての IDE のような単純な行の複製ではなく、コピー/貼り付けを使用することを本当に決意しています。

編集: Xcode 7.1 でも、行の複製と削除のショートカットはありません。これは、そのようなショートカットなしで作業した唯一の IDE です。そして、これら 2 つの重要なショートカットがなければ、開発者の生活は想像できません。

これを行う方法は次のとおりです。

最初に、Xcode.app バンドル内にある plist ファイルを変更する必要があります (編集するには sudo が必要です)。

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

次に、タグを探して<key>Insertions and Indentations</key>、その下に次を追加します。<dict>

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

次に、タグ<key>Deletions</key>の下のセクション内で と これらを見つけます。<dict>

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

ここに画像の説明を入力

Xcodeを開いて再起動し、[設定]に移動して[キーバインディング]タブに移動します。検索バーを使用して、新しいショートカットをフィルタリングして探します。次に、ショートカットの説明の前をクリックして、好みのショートカットを割り当てます。ショートカットが既存のショートカットと競合しないことを確認してください。

ここに画像の説明を入力

于 2016-03-30T17:29:13.460 に答える
14

@Haileiの答えはかなり良かったのですが、クリップボードの内容を壊してしまうという不幸な副作用がありました(複製された行の内容が入力されたままになっています)。これは、私が避けようとしていた手動のコピー/貼り付けアプローチの一部です。 。

そこで、コマンドシーケンスを次のように変更しました。

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

以外のものを設定したyank:場合、2は意図したとおりに機能しない可能性がありますが、これがデフォルトであると確信しており、変更するには重要な作業を行う必要があります(にエントリを追加する必要があります)。NSTextKillRingSize11~/Library/Preferences/.GlobalPreferences.plist

于 2012-11-13T22:04:57.237 に答える
9

なぜ単一の行を複製するのですか? 段落全体を複製する方が良いです。私のシーケンス:

現在の段落を複製

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

現在の段落を削除

selectParagraph:,
delete:,
moveUp:,
moveToEndOfParagraph:

Xcode 4.6で正常に動作します

于 2013-06-17T06:28:06.727 に答える
3

コマンドシーケンスを次のように修正することを検討します。

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

追加deleteToBeginningOfLineされた行は、複製された行のインデントを維持します。

于 2012-08-24T19:05:29.513 に答える
2

insertLineBreak は、少なくとも新しい行にコピーを作成するために必要でした。それがなければ、同じ行にコピーを取得しました

于 2013-04-06T21:04:17.777 に答える
1

IDETextKeyBindingSet.plist からの削除 ( CTRL+ ) エントリDと重複 ( CMD+ SHIFT+ ) エントリを次に示します。D( /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Versions/A/Resources 内)

これらをXcode 4.6.1でセットアップしました(上記および他の場所のuser570753からの回答に基づく)

    <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>
于 2013-04-03T04:02:52.257 に答える
0

SublimeのduplicateLineUpduplicateLineDownを XCode で一致させたい Sublime Text ユーザーは、 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>
于 2016-06-05T21:35:24.947 に答える