Eclipseから来て、常に行を複製するために使用されていたので、Xcodeにはそのような機能がないことがわかりました。それともそうですか?
システム全体のキーバインドを変更することは可能ですが、それは私が望んでいることではありません。
全体のポイントは、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 現在の行を複製します。これは、カスタムキーバインディングを使用している[〜#〜] not [〜#〜]である場合にのみ動作することに注意してください。 Xcodeで設定します。 「XCode Default」に切り替えると、動作するはずです。 Snow LeopardのXCode 3.2でテスト済み。
Mac OS Xのキーバインディングの詳細: http://funkworks.blogspot.it/2013/03/republishing-of-wwwerasetotheleftcompos.html
行を削除するには:Ctrl-A行の先頭に移動してからCtrl-Kそれを削除し、別の時間Ctrl-K空行を削除します。 (私はXcodeをあまり頻繁に使用しませんが、EmacsやEmacsのようなバインディングを持つ他のテキスト入力ではこれに慣れており、Xcodeでも動作するようです。)
そして、行を複製するために:そのためのコマンドを持つ多くのプログラムを知りませんが、通常はXcodeでコピー+貼り付けを使用しますそれはCUAのようなものです:Ctrl+A行の先頭に移動するには、Shift+↓選択して、コマンド +C コピーしてコマンド + *V 2回貼り付けます(1回行を上書きし、1回追加します)。
(多くの場合、さまざまなプログラムでテキストを常に入力および編集し、テキスト入力を少し修正している間、愚かなウィジェットで気を散らさなければならないことに時々腹を立てます。と習慣)
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.plist
自身でXcodeを使用し、この新しいエントリを追加します。
deleteToBeginningOfLine:, moveToEndOfLine:, deleteToBeginningOfLine:, deleteBackward:, moveDown:, moveToBeginningOfLine:
Xcodeを再起動し、Xcode> Preferences> KeyBindingsを開きます。マクロを見つけて、ショートキーを定義します。
キーバインディングソリューションを試しましたが、動作させることができませんでした。ただし、XCodeキーバインディングの編集は魅力のように機能します。これが私が作った方法です。
このソリューションは、クリップボードの内容を変更しません!
XCodeキーバインドを開く:
ユーザースクリプトの編集ダイアログ:
ラインアップの複製:
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
OK、だから私はしばらくこれを動かしていたが、突然壊れた。ここでさまざまな投稿を組み合わせて、XCode 6.3.1で機能するソリューションを見つけました。
Finderで/Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Versions/A/
に移動します。
resourcesという名前のフォルダーを見つけます。右クリックして[情報を見る]を押し、共有とアクセス許可の設定のロックを解除して(ロックを押す)、すべての読み取りと書き込みに設定します。
フォルダーに入り、ファイルIDETextKeyBindingSet.plistを見つけます。右クリックして[情報を見る]を押し、共有とアクセス許可の設定のロックを解除して(ロックを押す)、すべての読み取りと書き込みに設定します。
XCodeでファイルを開きます(デフォルト)
削除を見つけ、右クリックして新しい行を追加します。たとえば、Delete Lineという名前を付けます。値フィールドにselectLine:, deleteBackward:
と入力します。 (これは、重複する行に対しても実行できます:selectLine:,copy:,moveToEndOfLine:,insertNewline:,paste:,deleteBackward:
)
Xcode 4では、キーバインディングを使用してこれを実装するのが難しくなるため、 Keyboard Maestro を使用することに頼りました( Quickeys もうまく機能するはずですが、Lionと完全には互換性がありません)。たとえば、キーボードマエストロのショートカット(here-⇧-Dにバインド)は次のとおりです。
私はこのスレッドがかなり古いことを知っていますが、 BetterTouchTool を使用して別のソリューションを見つけました。Ctrl+A
、Ctrl+K
、Ctrl+K
BTTで次のように設定することにより、1つのショートカットでシーケンスを作成します。
(2番目と3番目のショートカットを追加するには、[追加のアクションボタンを添付]を使用します)
PS:Cmd+D
は行の削除です^^
ユーザースクリプトを使用します。
行を移動および削除するスクリプトはまだあります。これらのスクリプトのキーバインドを定義する必要があります(メニュースクリプト-> ユーザースクリプトの編集...、xCode 3.2の下)。
行を複製するには、独自のスクリプトを作成する必要があります。しかし、それは非常に簡単です! 「行を下に移動」スクリプトを複製し、選択したテキストを削除する行を削除します。
delete (paragraphs startLine through endLine)
トリプルクリックして行全体を選択し、command-cを選択してcommand-vを2回クリックして複製します。これはXcode関数ではなく、OSの一部にすぎません。
here を介したXCode4行複製の解決策があります。
また、plistに行の削除を追加しました。
<key>Remove Line</key> <string>selectLine:, deleteBackward:</string>
Xcodeを変更する必要はありません。 Xcode拡張機能を使用できます Linex
これは BetterTouchTool を使用して可能です。 CMD + Dは行を複製します。次のような新しいショートカットを作成します。
[追加のアクションボタンを添付]を使用して、2番目と3番目のショートカットを追加します
damien.flament による解決策はうまく機能し、「(出力出力を破棄)」にoutputを設定する必要があるかもしれません
追伸:彼の答えをコメントする方法がわかりません。
上記のように、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-D そして CTRL-SHIFT-K。
お望みならば CTRL-D そして CTRL-K、代わりにキー定義で^d
および^k
を使用します。ファイルに重複したキーバインディングがないことを確認してください。
XCode 3.2でうまく動作します
Xcodeキーバインディングを既にカスタマイズしている場合は、ファイル~/Library/Application Support/Xcode/Key Bindings/<user>.pbxkeys
を編集する必要があります。 2つの配列(上記)をRoot/text
辞書に追加するだけです。
現在の行を削除する3つのステップ(長すぎますが、非常に高速です:D)
Cmd + → :行末に移動
Cmd + Delete :行頭まで削除
Delete :空行を削除
Xcode 9.0を使用していますが、キーバインドはまだ機能していません。はぁ。
this Gist が非常に役立つので、今後の参考のためにここに再投稿しました。
/Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Versions/A/Resources/IDETextKeyBindingSet.plist
</dict>
<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>
XCodePlus削除行プラグインは、これを行うXCodeです。アルカトラズパッケージマネージャーが事前にインストールされています...
Xcode 6.1の場合、Xcode> Preferences> KeyBindings> Textに移動し、「行末まで削除」があり、必要なキーを割り当てます。
Xcode 9では、行を複製する組み込みの方法はまだありません。また、カスタムキーバインディングには問題があるようです。
更新: Xcode 10.0 beta 6(10L232m)は同じです。