Xcodeの重複/削除行


128

Eclipseから来て、常に行を複製するために使用されてきたので、Xcodeにそのような機能がないことを発見するのはかなり奇妙です。それとも?

システム全体のキー割り当てを変更できることは知っていますが、それが目的ではありません。



この設定は9.2で機能します stackoverflow.com/a/34195483/1348522
Zumry Mohamed '29

回答:


91

重要なのはCmd-C/ Cmd-Vショートカットを使用しないことです。IntelliJにも同じ問題があり、行を複製しCmd-Dて削除するだけでCmd-Y時間を大幅に節約できます。

それ以来、それは私を悩ませてきました。ただし、他の誰かが機能する解決策を見つけたようです。

つまり、~/Library/KeyBindings/PBKeyBinding.dict次の内容のファイルを作成し、Xcodeを再起動します。

{
    "^$K" = (
        "selectLine:",
        "cut:"
    );

    "^$D" = (
        "selectLine:",
        "copy:",
        "moveToEndOfLine:",
        "insertNewline:",
        "paste:",
        "deleteBackward:"
    );
}

:これは、2つのショートカットを作成しますCtrl- Shift- K現在の行を削除するとCtrl- Shift- D現在の行を複製します。ノートはこれがしますしてくださいということだけで、あなたがしている場合は動作しない Xcodeでセットを結合するカスタムキーを使用して。「XCode Default」に切り替えると、問題なく機能するはずです。Snow LeopardのXCode 3.2でテストされています。

Mac OS Xキーバインディングの詳細:http : //funkworks.blogspot.it/2013/03/republishing-of-wwwerasetotheleftcompos.html


5
これが本当の答えになるはずです。ところで、Eclipseからcmd-d(行の削除)ショートカットをインポートする場合は、まずXCodeの編集メニューの下にある[ブックマークを追加]ショートカットを変更する必要があります
Chris R

@ joshperry、Xcode 4+で動作するものはありますか?Duplicateコマンド(ではEdit -> Duplicate)「常に」グレーアウト(と行を複製することを意味するものではない)しているようです。
Blaz

私は初日からOS Xを使用しており、キーバインディングについては知りません。なんてクールな機能でしょう。私が偶然目にしたこの非常に素晴らしいGUIキーバインディングエディタを見てみましょう。
Alex Grey

Appleの開発者サイトで詳細情報を見つけました。
aleclarson 2014

Xcode 5.0.2 :(
voghDev

105

行を削除するにはCtrl- Aの先頭に移動し、次にCtrl-K行を削除し、もう一度Ctrl-K空の行を削除します。(私はXcodeをあまり使用していませんが、Emacsや、Emacsのようなバインディングを持つ他のテキスト入力では慣れています。Xcodeでも動作するようです。)

そして、行を複製するには:そのためのコマンドを持つ多くのプログラムを知りませんが、通常は単にコピー+貼り付けを使用します-XcodeではCUAのようです: Ctrl+A行の先頭に移動し、Shift+を選択しますそれは、コマンド +はCコピーするとコマンド + * V(ラインをオーバーライドしたら、それに追加する一度)を2回貼り付けます。

(いつもテキストを入力して編集している人から、多くの場合異なるプログラムで、テキスト入力を少し修正している間、時々ダムウィジェットで気を散らさなければならないことに腹を立て、彼はこれらのシーケンスを覚えておくことを避けられないだけです)と習慣)


3
これは、Cocoa Text Systemの機能であるため、テキスト入力にCocoaを使用するすべてのアプリケーションで機能します。このようなショートカットは他にもたくさんあります。それらのリストはここにあります:hcs.harvard.edu/~jrus/Site/System%20Bindings.html :)
Ahti

2
最近のMacでは、「yank」はctrl + Yである必要があります。
CarmeloS 2013

Command-Vで貼り付けて再度インデントします。コントロール -Yも貼り付けますが、貼り付けたテキストはインデントしません。
スコットガードナー

77

Eclipse CTRL+ D(Xcode 4.5.1でテスト済み)のような行を削除します。

まず、これらの権利を変更します。

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/Resources/IDETextKeyBindingSet.plistXcode自身で開き、次の新しいエントリを追加します。

deleteToBeginningOfLine:, moveToEndOfLine:, deleteToBeginningOfLine:, deleteBackward:, moveDown:, moveToBeginningOfLine:

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

Xcodeを再起動し、Xcode> Preferences> KeyBindingsを開きます。マクロを見つけて、ショートキーを定義します。

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


5
行を複製する方法を追加する場合も同じようにしますが、IDETextKeyBindingSet.plistファイルに新しい値を貼り付けるときに、このコード「selectLine :, copy :, moveToEndOfLine :, insertNewline :, paste :, deleteBackward: 」
jollyr0ger 2013

+1このソリューションは機能しましたが、Xcode 4.6.1では^ Dが他の既存のキーバインディングと競合していました。
バーナード州

どのようにして「現在の行を複製」することができますか?
マーカス

これはxcode 6では機能しません。リストから最初の関数のみが呼び出されます
Mrug

1
私はそれが大好きで、XCode 6.3.1の下では私にとって魅力のように機能します。
fwielstra

9

キーバインディングソリューションを試しましたが、機能しませんでした。ただし、私のXCodeキーバインディングの編集は魅力のように機能します。ここに私がそれを作った方法があります。

このソリューションはクリップボードの内容を変更しません!

XCodeキーバインディングを開きます。

代替テキスト

[ユーザースクリプトの編集]ダイアログで:

  1. 「Move Line Down」スクリプトを複製して名前を変更します
  2. "Move Line Down.scpt"ファイルを複製し、スクリプトの名前を変更し、スクリプトエディターで(ダブルクリック)してファイルを選択します。
  3. スクリプトを編集し(「AppleScriptエディター」を開き)、「削除(段落startLineからendLineまで)」の節を削除します。
  4. XCodeを再起動したくない場合は、スクリプトを削除して再度追加する必要があるようです。「出力」が「出力を破棄」に設定されていることを確認してください。そうでない場合、ソースファイルに「(null)」が含まれます。
  5. 適切な行が選択されるように、スクリプトを少し修正しました。

ラインアップを複製:

using terms from application "Xcode"
tell first text document
    set {startLine, endLine} to selected paragraph range

    if startLine > 1 then
        set theText to (paragraphs startLine through endLine)
        set theText to (theText as string)
        make new paragraph at beginning of paragraph (startLine) with data theText
        set selected paragraph range to {endLine + 1, endLine + endLine - startLine + 1}
    else
        beep 1
    end if
end tell
end using terms from

重複ラインダウン:

using terms from application "Xcode"
tell first text document
    set {startLine, endLine} to selected paragraph range
    if endLine < (count paragraphs) then
        set theText to (paragraphs startLine through endLine)
        set theText to (theText as string)
        (* delete (paragraphs startLine through endLine) *)
        make new paragraph at beginning of paragraph (endLine + 1) with data theText
        set selected paragraph range to {startLine, endLine}
    else
        beep 1
    end if
end tell
end using terms from

代替テキスト


2
上記で明確に述べられていないが、行削除、行上移動、行下移動の既存のスクリプトがあります。受け入れられた回答には、キーバインディングがXCode Defaultに設定されている場合にのみ機能するという欠点があります。スクリプトのキーバインドは他のXCodeのキーバインドとは別に処理されるため、スクリプトを使用すると、カスタマイズされたキーバインドを維持できます。
病原体

7

わかりました、それで私はしばらくこれを動かしていました、そしてその後突然それは壊れました。ここで私はここのさまざまな投稿を組み合わせて、XCode 6.3.1で機能するソリューションを見つけました。

  1. /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Versions/A/Finderで移動します。

  2. Resourcesという名前のフォルダーを見つけます。右クリックして[情報を見る]を押し、共有と権限の設定のロックを解除(ロックを押す)して、すべてのユーザーに対して読み取りと書き込みを設定します。

  3. フォルダを入力し、IDETextKeyBindingSet.plistファイルを見つけます。右クリックして[情報を見る]を押し、共有と権限の設定のロックを解除(ロックを押す)して、すべてのユーザーに対して読み取りと書き込みを設定します。

  4. XCodeでファイルを開く(デフォルト)

  5. 削除を見つけ、右クリックして新しい行を追加します。たとえば、Delete Lineと名前を付けます。値フィールドに、次のように入力しますselectLine:, deleteBackward:。(これは、重複した行のために行うことができます。selectLine:,copy:,moveToEndOfLine:,insertNewline:,paste:,deleteBackward:

  1. XCodeを起動し、[設定] / [キーバインド]に移動して、[行の削除]を検索します。ショートカットを設定します。楽しい。

6

Xcode 4ではキーバインディングを使用してこれを実装することが困難になるため、キーボードマエストロを使用することに頼りました(Quickeyもうまく機能するはずですが、完全にLion互換ではありません)。たとえば、ここに私のキーボードMaestroショートカットがあります(⌘-⇧-Dにバインドされています)。

http://bit.ly/thC6yf


3
「36ドルで今すぐ購入」...なんと盗む)笑... Maestroサイトでこれを見るまで、私はそれが良い解決策かもしれないと思いました
ycomp



5

私はこのスレッドがかなり古いことを知っていますが、BetterTouchToolを使用して別の解決策を見つけました。BTTで次のように構成することにより、1つのショートカットでCtrl+ ACtrl+ KCtrl+ Kシーケンスを実行できます。

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

([追加のアクションをアタッチ]ボタンを使用して、2番目と3番目のショートカットを追加します)

PS:Cmd+ Dが削除行であるEclipseから来ます^^


4

行全体を選択するにはトリプルクリックし、複製するにはcommand-cを選択し、command-vを2回クリックします。これはXcode関数ではなく、OSの一部です。


2
マウスクリックでさらに悪いことに、トリプル?それは確かに人々がキーボードショートカットを使いたいと思っている解決策ではありません。
Ixx

4

ユーザースクリプトを使用します。

行を移動および削除するスクリプトはまだあります。これらのスクリプトのキーバインドを定義する必要があります(xCode 3.2の下で、メニュースクリプト -> ユーザースクリプトの編集...)。

行を複製するには、独自のスクリプトを作成する必要があります。しかし、それは非常に簡単です!「行を下に移動」スクリプトを複製し、選択したテキストを削除する行を削除します。

delete (paragraphs startLine through endLine)

3

ここに XCode4行の複製の解決策があります

また、plistに行の削除を追加しました。

<key>Remove Line</key> <string>selectLine:, deleteBackward:</string>


3

Xcode 9.0を使用していますが、キーバインドはまだ機能していません。はぁ。

私はこの要点が非常に役に立ったので、将来の参考のためにここに再投稿します

  1. 開いた /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Versions/A/Resources/IDETextKeyBindingSet.plist
  2. 次のXMLスニペットをこのファイルの下部のすぐ上に追加します </dict>
  3. Xcode設定->キーバインド->テキストタブ->複製が表示されるまでスクロールします
  4. [現在の行を複製]をクリックして、ショートカットを追加します。Cmnd + D(重複するバインディングを解決)
  5. Xcodeを開く

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



2

damien.flamentによる解決策は適切に機能し、出力を「Discard Output」に設定する必要がある場合があります。下の画像を参照してください

ユーザースクリプト設定

PS:私は彼の答えにコメントする方法がわかりません。


2

上記のように、XCodeを閉じ~/Library/Application Support/Xcode/Key Bindings/ <user>.pbxkeys<dict><key>text</key>セクション内に以下を挿入します 。

    <key>^D</key>                                                                                                      
    <array>                                                                                                            
        <string>moveToLeftEndOfLine:</string>                                                                               
        <string>deleteToEndOfLine:</string>                                                                                      
    </array>                                                                                                           
    <key>^K</key>                                                                                                      
    <array>                                                                                                            
       <string>selectLine:</string>                                                                               
       <string>copy:</string>                                                                                     
       <string>moveToEndOfLine:</string>                                                                          
       <string>insertNewline:</string>                                                                            
       <string>paste:</string>                                                                                    
       <string>deleteBackward:</string>                                                                           
    </array>

スタートXcodeと楽しむCTRL- SHIFT- DCTRL- - 。SHIFT - と- が必要な場合は、代わりにand をキー定義で使用します。ファイルに重複したキーバインディングがないことを確認します。K
CTRLDCTRLK^d^k

XCode 3.2でうまく動作します


2

これはBetterTouchToolを使用して可能です。CMD + Dは行を複製します。次のような新しいショートカットを作成します。

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

[追加のアクションをアタッチ]ボタンを使用して、2番目と3番目のショートカットを追加します。


1

Xcodeキーバインディングをすでにカスタマイズしている場合は、ファイルを編集する必要があります~/Library/Application Support/Xcode/Key Bindings/<user>.pbxkeys。(上記の)2つの配列をRoot/textディクショナリに追加するだけです。


ヒヤ。私はこれには従いません。pbxkeyドキュメントはXMLですが、上記の〜/ Library / KeyBindings / PBKeyBinding.dictファイルは完全に異なる形式です(JSONのように見えます)。pbxkeysドキュメントにルート/テキストエントリがありません。それ以降のバージョンを使用しているためですか?
ベンクレイトン

1

現在の行を削除するための3つのステップ(長すぎますが、非常に高速です:D)

Cmd+ :行末に移動
Cmd+ Delete:行頭に削除
Delete:空行を削除


0

Xcode 6.1の場合、Xcode> Preferences> KeyBindings> Textに移動し、「Delete to End of Line」があり、必要なキーを割り当てます。



0

Xcode 9以降、行を複製する組み込みの方法はまだありません。カスタムキーバインディングには問題があるようです。

更新: Xcode 10.0ベータ6(10L232m)は同じです。


0

このアドレスに行きます:

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

そして、IDETextKeyBindingSet.plistファイルをどこかにコピーしてから、コピーしたファイルを開いて挿入します

selectLine:、copy:、paste:、paste:この画像のように、 ここに画像の説明を入力してください して保存し、このアドレスのコピーしたファイルを置き換えます/Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources/IDETextKeyBindingSet

次に、xcodeを再起動し、xcode prefencesを開き、キーバインドタブに移動し、重複する行(カスタマイズされた行)を検索し、以下の画像のように短いキーを定義します

[1]:https://i.stack.imgur.com/UTeZu.png


口コミから:こんにちは、この投稿は質問に対する質の高い回答を提供していないようです。回答を編集して改善するか、コメントとして投稿してください。
sɐunıɔןɐqɐp
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.