私がしたいこと
私の目標は、現在の行の最後にセミコロンを追加し、カーソル位置を行の途中に維持することでした。
例えば
func([{''}])
// /\
// ||
// ||
// current cursor position
//
// Now I want to add a semi-colon to the end-of-the-line
// but then continue typing my string contents at the same
// cursor location. i.e. I now want this, with as few
// keystrokes as possible:
//
// Add this semi-colon...
// |
// |
// V
func([{''}]);
// /\
// ||
// ||
// ...while maintaining this cursor position
やりたい理由
WebStorm は、入力時に句読点を適切に「補完」します。つまり、 を入力する({['
と、 に自動補完され({[' <<cursor here>> ']})
ます。後で忘れる可能性があるため、さらに入力する前に、行末にセミコロンを含めることを確認したいと思います。ただし、セミコロンを追加した後、現在のカーソル位置で入力を続けたいと思います。オートコンプリートを使用して行末にセミコロンを追加できることはわかっていますが、これにより行末にカーソルが残るため、戻る矢印を複数回押す必要があります。さらに、半分完成した行がまだ正しい JavaScript 構文になっていない場合があるため、オートコンプリートが機能しないこともあります。
大変だった理由
解決策は簡単に思えました。単純なマクロを作成して行末にジャンプし、セミコロンを入力して、元の場所に戻るだけです。問題は、WebStorm を元の場所に戻す方法を理解するのが難しいことです! ブックマークを設定し、行末に移動し、セミコロンを入力してブックマークに戻ることを試みましたが、それは機能しません。私の知る限り、ブックマークは列ではなく行のみを記憶するからです。最初に現在の場所 (例: xcursorx
) にガベージ マーカー テキストを入力し、行末に移動し、セミコロンを入力しfind
、ガベージ マーカー テキストを単純に実行しようとしましたが、WebStorm のマクロが表示されないため、それも機能しません。find
ルーチンにテキストを入力することでうまく遊ぶことができます。最初にガベージ マーカー テキストを入力してみました。行末に移動し、Navigate/Last Edit Location
ゴミを削除しますが、それも機能しません。
最終的に機能したこと
次のようにマクロを作成しました (個々の手順で示されているキーボード ショートカットは、「Mac OS X 10.5+」キーマップのものです...セットアップに適したショートカットまたはメニュー オプションを使用してください):
- 目的の場所のカーソル/キャレットから始めて、マクロの記録を開始します (つまり
Edit > Macros > Start Macro Recording
)
- ピリオドなど、スペースや単語以外の文字を 1 つ入力します
- その直後に、「xcursorx」など、他では使用しないガベージ マーカー テキストの「単語」を 1 つ入力します。
- その直後に、別の 1 つの非スペース/非単語文字、たとえば別のピリオドを入力します (つまり、「.xcursorx.」と入力しました)。
- 行末にジャンプする (例: コマンド-右矢印)
- セミコロンを入力
- セミコロンの直後 (つまり、スペースなし) に、ガベージ マーカー テキストの同じ単一の「単語」をもう一度入力しますが、隣接する非スペース/非単語文字は使用しません。たとえば、「;xcursorx」と入力します。
- カーソルを「単語」 1 つ後ろに移動します (たとえば、option-左矢印)
- カーソル位置の単語を検索します (つまり
Edit > Find > Find Word at Caret
) ( 「xcursorx」を手動で入力するときは、通常の単語を使用しないでください)find
- 選択したテキストを削除します (つまり、delete または backspace キーを押して、行末の 2 番目の「xcursorx」を削除します)。
- 最後に選択されたテキストの前の出現を見つけます (つまり
Edit > Find > Find Previous/Move to Previous Occurrence
、または shift-command-G)。これにより、「.xcursorx」内の「xcursorx」が選択されます。
- 選択したテキストを削除します (つまり、削除またはバックスペース キーを押します)。
- 1 文字進む (つまり、右矢印、2 番目のピリオドの後に移動)
- 2 文字を削除します (つまり、delete または backspace を 2 回押して、2 つのピリオドを削除します)。
- マクロの記録を停止します (つまり
Edit > Macros > Stop Macro Recording
)
- マクロに名前を付けます (例: 'place-semicolon-at-end-of-line')
- マクロにキーボード ショートカットを指定します (例:
Preferences > (scroll down to) Macros > place-semicolon-at-end-of-line > (right click) > Add Keyboard Shortcut
... 必要なショートカットを入力します。例: オプション-セミコロン)。
あいまいな手順の説明
ユースケースによっては、上記のすべての手順が必要なわけではありません。たとえば、 を使用した上部の例では、これが機能するために余分なピリオドを追加する必要はありませんfunc([{''}])
。ただし、カーソルがすでに行の最後にある場合など、いくつかの特殊なケースでは追加の手順が必要です。
それの使い方
マクロを使用するには、通常のタイピング (上の例では、表示されるタイプ) から始め、ショートカット (たとえば、オプション セミコロン) を入力すると、行末にセミコロンが表示されますがfunc([{'
、func([{''}])
カーソルは元の場所に残ります。
警告
ガベージ テキストが挿入されてから削除されると、表示が少しジャンプするため、この解決策は少しハックです。ただし、少なくとも機能します。ガベージ マーカー テキストを必要とせずに同じ最終目標を達成する方法を誰かが理解できれば、それは素晴らしいことです。