web-dev-qa-db-ja.com

Xcode重複行

is編集メニューのDuplicateコマンド(デフォルトのショートカットは D)、しかし( Halley 指摘したように)XcodeのInterface Builder部分での複製を意図しています。

それでは、Xcode 4の行をどのように(easily)複製しますか?


関連する質問 (有効な回答あり)Xcode 3の場合...およびXcode 4の場合は機能しません。


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

それは退屈で、あまりにも多くの手技を必要とするからです:

どちらか(1):行の先頭に移動してから押す ⇧^E、次にコピー ⌘C、新しい行に移動し、カーソルを調整し、finallyで貼り付け ⌘V;

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

フランクシュレーダー( 関連する質問 )に次のように書いてください:

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

111
Blaz
  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. 以下のスクリーンショットとして、新しい辞書と新しいコマンドアイテムを追加します(必要な名前を付けます)。 Editing the plist

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

  4. Xcodeを再起動し、[設定]-[キーバインド]に移動して、コマンドを検索します。

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

  6. 最後に、Xcodeのキーバインディングのパワーを解き放ちました...お楽しみください!

164
Hailei

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でも重複行を追加できます

2019年10.2.1でも動作

次のファイルを編集するには、許可を与えてください。ほとんどの場合、OSはファイルの編集を許可しません。

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

Sudo chmod 777 /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources/

次のファイルを編集します。

/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

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

編集したファイルのスクリーンショット。

enter image description here

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

enter image description here

それでおしまい。

62
Zumry Mohamed

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

GitHubリポジトリからダウンロードできます: XcodeKit Plugin-https://github.com/ptfly/XcodeKit

17
peerless

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

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

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

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

13
Kelan

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

現在の段落を複製

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

現在の段落を削除

selectParagraph:,
delete:,
moveUp:,
moveToEndOfParagraph:

Xcode 4.6で正常に動作します

8
BB9z

編集:2019年5月28日Xcode 10.2へのアップデート後、再びショートカットがなくなりました。それらを再度追加する必要がありました。

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

編集:2018年10月14日Xcode 10:Appleは本当にコピー/ペーストが大好きで、 Xcodeアップデートのすべてのバージョンで、行の重複はすべてのインストールから削除されます。開発者は、XcodeでこのIDE行重複オプションなしXcode 10にアップデートしたばかりで、ご想像のとおり、すべてのショートカットキーは行の複製機能とともに削除されていますが、元の回答のように修正可能です。ライン:

<string>selectLine:, copy:, moveToBeginningOfLine:, paste:, moveToEndOfLine:</string>

EDIT:Xcode 9:ショートカットと行の複製と削除をやり直す必要がありましたが、IDETextKeyBindingSet.plistを再度編集できるようになりました。この高値Appleこのバージョンをリリースしたとき、男は休暇中でなければなりません。

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

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

私が読んだ内容に基づいて、これらのショートカット用にXcodeをセットアップし、それについてブログに書きました: http://jixte.com/2016/03/30/line-duplicate-and-deletion-in-xcode -7-x /

方法は次のとおりです。

まず、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>

enter image description here

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

enter image description here

8
zeeshan

なぜ誰も使用について言及していないのだろうか  矢印キー()カーソルの移動と行全体の選択(追加により) )。

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

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

8
Baldur

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

selectParagraph:, delete:, yank:, moveToBeginningOfLine:, setMark:, yank:, moveToBeginningOfLine:, moveLeft:, selectToMark:
  • クリップボードに触れない
  • 複数の行で動作します
  • 追加された行を選択するため、再選択せずに複数回使用できます

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

編集:マイナーな修正edit2:段落選択に変更

7
Rychu

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

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

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

3
user570753

insertLineBreakは、少なくとも新しい行にコピーする必要がありましたが、それなしで同じ行にコピーしました

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

これを行う他の可能な方法はほとんどありません here

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

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

押す control + XYEnterの順にクリックして、nanoエディターでファイルを保存します。

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

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

ここに私の削除(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>
1
Rob
<key>Duplicate Lines</key>    
<string>selectLine:, copy:, moveToBeginningOfLine:, paste:</string>

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

0
Luminoid

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

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

XCodeでsublimeの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
internet-nico

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

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

私が提案したコマンドは、2行下の目的の行をコピーしていました。

0
Rod