1

「AはBである」といった文章を、「BはAである」といった風に、テキストを編集したいです。
いつもCut & Pasteを使って入れ替えるのですが、この操作がかなり頻繁にあるため、もし1コマンドで実行できるようなショートカット等あれば教えていただけないでしょうか。

インターネットで検索しましたが、良い記事が見つからなかったため、質問させていただきました。どうぞよろしくお願いいたします。

TR123
  • 77
  • 1
  • 9

1 Answers1

2

残念ながら「AはBである」といった日本語表現を解析し、アプリケーションを限定せず、ワンアクションで置換処理を実行する機能はWindowsに存在しません。

しかしWindowsの標準機能であるPowershellと「ショートカット」の「ショートカットキー」を組み合わせればちょっとしたRPAを実現できます。

  1. 任意のフォルダに後述のPowershellスクリプトを保存します。
    スクリプトの作成方法や実行方法(.ps1ファイルの文字コードSet-ExecutionPolicyなど)の説明は省略します。
  2. 保存したスクリプトをエクスプローラー上で右クリックして「ショートカットの作成(S)」をクリックします。
  3. 作成したショートカットファイルをデスクトップに貼り付けます。
  4. デスクトップのショートカットファイルを右クリックして「プロパティ(R)」をクリックします。
  5. 「ショートカット」タブのリンク先(T):の先頭にpowershell を追記します。
  6. ショートカットキー(K):に任意のキーを入力します。
    ショートカットのプロパティ
  7. OKボタンを押します。

これで1コマンドでコピー(Ctrl+C)→置換→貼り付け(Ctrl+V)を実行できるショートカットを作成しました。
※そのためxyzzyなど上記のショートカットキーを受け付けないソフトでは動作しません。

後は「BはAである」をカーソルで範囲選択してショートカットキーを押し、数秒待ちます。(powershellの起動を待つために時間がかかります)
下記のように動作します。一瞬黒い画面が出るのは仕様です。

動作イメージ

Powershellスクリプト

Add-Type -AssemblyName System.Windows.Forms

Start-Sleep -m 100 System.Windows.Forms.SendKeys::SendWait("^c") Start-Sleep -m 100 $src = Get-Clipboard $m = [regex]::Match($src, "(.+)は(.+)である") if($m.Success) { $res = "{0}は{1}である" -f $m.Groups[2], $m.Groups[1] $res | Set-Clipboard System.Windows.Forms.SendKeys::SendWait("^v") }

payaneco
  • 12,323
  • 21
  • 57