Xcode重複行


127

そこであるDuplicate(デフォルトのショートカットで、編集メニューのコマンドがD)が、(としてそれがあるハレーが指摘)のXcodeのInterface Builderの部分で重複するためのもの。

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


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


なぜコピー&ペーストしないのですか?

面倒で手にアクロバットが多すぎるからです。

いずれか(1):行の先頭に移動してからを押し⇧^E、次にでコピーし⌘C、新しい行に移動し、カーソルを揃え、最後にで貼り付け⌘Vます。

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

フランクシュレーダー(関連質問)は次のように述べています。

重要なのは、Cmd-C / Cmd-Vショートカットを使用しないことです。


1
行を選択してコピーして貼り付けますか?
ダニ

1
@ダニ、CPはあまりにも多くの作業です(そして、行の重複は必要がほとんど発生しないものではありません)。:)私は質問を更新しました。
Blaz

1
Command-Dは、Interface Builderでのコントロールの複製用です。
Hailei

@ハリー、これは知っておくと良い。そしてそれは⌥-mouse-drag(これもインターフェース要素をコピーする)と同等ですか?
Blaz

@courteousそう思います。disanji.net/iOS_Doc/#documentation/DeveloperTools/Conceptual/…の Modifier Keysセクションには、「ドラッグアンドドロップ操作中にOptionキーを押すと、選択したオブジェクトが移動するのではなくコピーされる」と記載されています。
Hailei

回答:


173
  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を再起動し、[設定]-[キーバインディング]に移動して、コマンドを検索します。

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

  6. ついにXcodeのキーバインディングの力を解き放ちました...楽しんでください!


3
@MichalStefanow、あなたが書いた場所は、実際に/Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resourcesエイリアスが指す場所同じです。それ以外の場合は、バージョン4.3.2でハリーの手順を正常に実行しました。元のファイルをバックアップし、Xcode自体(TextEditではなく)で開くことをお勧めします。また、権限に関して:Finderでの変更(ファイル自体のみ。再帰は不要)は問題なく機能しました。
Blaz

29
大きな感謝!遅延ユーザーの場合-selectLine:、copy:、moveToEndOfLine:、insertNewline:、paste:、deleteBackward:
Vlad Tsepelev

15
xCodeがクラッシュした場合!閉じるXcodeの、任意のテキストエディタで開いているファイルや、あなたの辞書を追加: <key>Custom</key> <dict> <key>Duplicate Current Line</key> <string>selectLine:, copy:, moveToEndOfLine:, insertNewline:, paste:, deleteBackward:</string> </dict>
ヴラドTsepelev

2
XCode 4.4.1で動作します!パーミッションの変更に問題がありました(ファインダーまたはchmod 777で、ターミナルからsudoで開始すると、何らかの理由で機能しませんでした)。ファイルを別の場所にコピーして編集し、元のファイルを上書きしました。
Ixx

2
私はandroid devです。iosdevを試してみると、androidスタジオ(またはintellijのアイデア)が優れていることに気付きました。
イリヤエレミン

90

アップデート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. 次のコマンドを書き込んで、ファイルを編集します(可能な場合は、ファイルを崇高なエディタまたはテキストエディタで開きます)。

11.3.1の場合

open  

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

以下のバージョン

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/ 

それは魅力のように機能します!私はを編集しIDETextKeyBindingSet.plistて上記の辞書を追加し、XCodeの設定でキーをマッピングしました。
Randika Vishman 2016

3
これらはMacユーザーが必要とするオタクの答えです!
Luca Davanzo

1
XCodeの10.1のために、私は次の文字列を使用する必要がありました:moveToBeginningOfLine :, deleteToEndOfLine :,ヤンク:, insertNewline :,セットマーク:, moveToBeginningOfLine :, selectToMark :,ヤンク:。@tmsimontに感謝-marcelosalloum
1

1
これは、Xcodeが更新されるたびにGoogleが最初に行うことです。
newDeveloper

1
この解決策は、受け入れられた答えではなく私にとって
有効です

18

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

XCode 11のバージョン:

selectParagraph:, delete:, undo:, moveRight:, yankAndSelect:
  • クリップボードに触れない
  • 複数のラインで動作します
  • 追加された行を選択するため、再選択せずに複数回使用できます
  • XCode 11での選択の修正
  • 元に戻すとうまく機能します

XCodeを更新するたびにこの変更を適用するため、そのためのスクリプトを作成しました。おそらくそれはいくつかの損傷を引き起こす可能性がありますが、私はそれを比較的安全にしようとしました。ファイルのコピーを作成し、perlを使用してlineをそのコピーと追加のコマンドで置き換えます。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

編集:マイナーな修正edit2:段落選択に変更edit3:XCode 11のバージョンを追加


この組み合わせを探して本当にありがとう。これにより、不要なnewLinesを追加せずに1行または複数行を複製でき、ctrl-zもうまく機能します。
mkeremkeskin

おかげで、それはIntelliJの動作に最も近いものです
IMHO

17

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

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


これをダウンロードしてインストールしました-システム環境設定を使用して、コマンドのキーボードショートカットを設定することもできます。非常に素晴らしい!
Orion Edwards

これが現在のクリップボードを壊さないからです。キーバインドを追加するには:システム設定->キーボード->ショートカット->アプリのショートカット-> '+'。Xcodeとメニュータイトルを選択します(例:「選択
項目

これをインストールしました。AWESOME、なんらかの理由で、編集中の「Duplicate」メニューがグレー表示されます。エディタで行を選択しましたが、カーソルで行全体を選択してみました。
John Ballinger

これは素晴らしいだけではありません。ありがとうございました!
0x6A75616E 2014

私にはうまくいきません。「複製」はグレー表示され、キーボードショートカットも機能しません。
SquareBox 2018年

13

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

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

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

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


defaults write -g NSTextKillRingSize 1GlobalPreferences.plistを操作する代わりに、コマンドを使用することをお勧めします。;)
dbernard 2013年

@amas親フォルダーのアクセス許可を変更するリスクがない限り、ファイルを変更する前に別の場所にコピーしてから元のファイルを上書きする必要がある可能性があります。
ニッポン

これはほとんど機能しますが、何らかの理由で、複製された行の末尾に一連の空白が追加されます。
tmsimont 2014

5
この修正で修正した場合:moveToBeginningOfLine:, deleteToEndOfLine:, yank:, insertNewline:, setMark:, moveToBeginningOfLine:, selectToMark:, yank:
tmsimont 2014

これは推奨される回答です(@Haileiのガイドに従います)。ありがとう!
brkeyal 2017年

9

矢印キー()を使用してカーソルを移動し、行全体を選択する(を追加する)ことについて誰も言及しなかったのはなぜでしょうか。

+ (ではなくctrl+ A)を使用してカーソルを行の先頭に移動し、次に(+ +の代わりに)ctrl+ + Eを使用して行全体を選択し、コピー/貼り付けして、行全体を定期的にコピー(複製)します。

私は他のスレッドに出くわしましたが、誰もこれらのキーボードショートカットを使用していないようです。それらはOS Xでグローバルであり、私はいつもそれらを使用しています!はるかに手アクロバット;)


これには、1つのアクション/キーの組み合わせだけで複製するよりもはるかに「手作業のアクロバット」が必要です...テキストエディターまたはWebブラウザーでテキストを複製する方法です。そうですが、IDEにはもう少し期待しています。
Ixx 2013年

1
また、重複する行のショートカットを使用すると、クリップボードの内容を上書きしません。多くの場合、何かをコピーしてコードを複製し、それを貼り付けたいと思っています-あなたの方法では、もう一度コピーする必要があります。
からIxx

はい、そうです。しかし、OPによって提案された方法よりも少ないです。単一のコマンドが最善であることに同意できます。私は代替案を指摘するつもりでした。
Baldur 2013年

1
これは、すぐに使えるものよりも優れています。選択なしのcmd + C / Xが、他のエディターのように行全体をコピー/カットすることを
願って

@Baldurこれも私がやっていることです。cmd +左cmd + shift +右cmd + c cmd +右cmd +左cmd + pを入力します。7回のキーストロークでは、3秒未満で簡単に実行できますが、多くのテキストエディターと同様に、ctrl + dを使用する場合と比べると、かなり面倒です。残念なことに、これがxcodeに組み込まれていないか、一般にMacとAppleソフトウェアには、より良いホットキーがありません。
csga5000 2015

9

編集:2020年7月12日 Xcode 11.5に更新した後duplicate lineplistファイルからのキーエントリが失われました。もう一度追加する必要がありました。キーバインドはまだそこにありました。

編集:2019年9月17日 Xcode 10.3へのアップデート後再び私のduplicate lineplistファイルからのキーエントリが消えました。もう一度追加する必要がありました。キーバインドはまだそこにありました。

編集:2019年5月28日 Xcode 10.2にアップデートした後duplicate lineplistファイルが消えました。もう一度追加する必要がありました。キーバインドはまだそこにありました。

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

ここに画像の説明を入力してください


8

なぜ単一の行を複製するのですか?段落全体を複製することをお勧めします。私のシーケンス:

現在の段落を複製

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

現在の段落を削除

selectParagraph:,
delete:,
moveUp:,
moveToEndOfParagraph:

Xcode 4.6で正常に動作します


同意し、段落を操作することは行よりも優れています。皆さん、エディターをテキストを折り返すのに十分な幅にして、行コマンドを使用してみてください。
Logan Moseley

コードがラップするウィンドウの大きさはどれくらいですか。頻繁に発生する場合は、コードを小さな行に分割することを検討してください。
2016

3

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

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

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


(見栄えの良い)改行をコンマの後のスペースに置き換える必要があることに気づいたら、これはうまくいきました。
McUsr 2014


2

MacOS SierraとXcode 9で.plistファイルのロックを解除するのに大きな問題がありました。@ Timの決定が機能しませんでした。同じ問題が発生する場合は、ターミナルに移動してこれを行います:

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

これを行う他の可能な方法はここにも記載されています

次に、nanoエディターで^W「挿入」をクリックして入力し、「挿入とインデント」の部分にジャンプします。<dict>タグのすぐ下にこのxml-snippetを貼り付けます:

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

押してcontrol + X、その後Y、その後、Enterナノエディタでファイルを保存します。

UPD:私はより良い決定をしました、それは複製の前に追加の行を追加します(そのすぐ下に別の行がある行を複製したい場合に便利です):

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

1

これが私の削除(CTRL+ D)と複製(CMD+ SHIFT+D IDETextKeyBindingSet.plistからの)エントリです。(/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>

0

XCodeの崇高なduplicateLineUpおよびduplicateLineDownに一致させたい崇高なテキストユーザーは、以下を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>

0

他の誰かがIDETextKeyBindingSet.plistを編集するためのアクセスを拒否された場合は、次の方法で自分に読み取り/書き込み権限を与えることができます。

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

0

ハイレイの答えを補足するために、私にとって最も効果的なコマンドは次のとおりです。

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

彼の提案されたコマンドは、私にとって、2行下の目的の行をコピーすることでした。


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

重複する行がサポートされています。(これはXcode 9.2で機能します)


0

Xcode 11に関しては、上記のどれも私にはうまくいきませんでした。最初の答えは、次の行の後に行を挿入するため、奇妙な動作をしていました。しかし、次の答えは私にとってはうまくいきました。

<key>Duplication</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>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.