Notepad ++からクリップボードにコピーされたデータから先頭のインデント(タブとスペース)を取り除く方法が必要です。
Notepad ++ドキュメント自体のデータには、これらの先頭のインデントが含まれている必要がありますが、クリップボードにコピーされたデータには含まれていません。
この動作は、CTRL + Cのみで開始し、Notepad ++内にいる場合にのみ開始する必要があります。
これは、マウスでテキストを定期的にマークすると、Notepad ++で発生することです:
テキストに定期的にマークを付けてコピーした後、クリップボードに表示されるはずです:
cat
ヒアドキュメントが含まれます(ヒアドキュメント区切り文字の処理、長い話)。次の AutoHotKey (AHK)スクリプトについて考えてみます。 AutoHotkeyスクリプトの詳細については、 AutoHotkeyチュートリアル およびドキュメントを参照してください。
AutoHotKeyをインストールした後、を押します Ctrl+Shift+c または x Notepad ++内で、線をトリミングしてクリップボードにコピー(またはカット)します。
注:私は使用しました Ctrl+Shift 元のコピーを引き続き使用して、通常どおりにカットすることができます。 Ctrl。この動作が気に入らない場合は、+
と+^c::
の両方から+^v::
を削除してください。
説明については、コメント(;
で始まる)を参照してください。他のコーディングと同様に、後でスクリプトに戻ったときにスクリプトをよりよく理解するために、コメントを残しておくことをお勧めします。
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
TrimClipboard()
{
; Split each line of the clipboard into an array.
; Note: Ignoring Cr (`r) prevents duplicate rows
linesArray := StrSplit(clipboard, "`n", "`r")
newClip := "" ; Initialize output string
for index, element in linesArray
{
; For each line: trim it, append it and CrLf to output string
newClip .= trim(element) . "`r`n"
}
; Note: There is always an extra newline at this point, regardless
; of if the clipboard ended in a newline.
; Assign value back to clipboard, without the trailing CrLf
clipboard := SubStr(newClip, 1, -2)
}
#IfWinActive ahk_class Notepad++
; On Shift+Ctrl+C, perform copy, wait for new content, and trim clipboard
+^c::
; Note: ^{sc02e} is the scancode for c which works regardless of keyboard layout
Send, ^{sc02e}
Clipwait
TrimClipboard()
return
;On Shift+Ctrl+X, perform copy, wait for new content, and trim clipboard
+^x::
; Note: ^{sc02d} is the scancode for x which works regardless of keyboard layout
Send, ^{sc02d}
Clipwait
TrimClipboard()
return
; sc02e && sc02d are keyboard scan codes for the keys c and x respectively.
; The scancodes work regardless of the keyboard layout set in Windows
#IfWinActive
Alt + Mouse dragging
またはAlt + Shift + Arrow keys
を使用して列を選択し、次にCtrl+C
を使用して列をコピーします。
この例を参照してください: https://notepad-plus-plus.org/fr/features/column-mode-editing.html
編集:
列全体、または複数の列を選択することもできます。また、1つまたは複数の行を選択することもできます。
これを行う簡単な方法は次のとおりです。
必要な選択の先頭でマウスを左クリックします。
必要な選択を停止する必要がある場所に移動します
カーソルをその2番目の最後の場所に移動します。
ALT
+ SHIFT
キーとleft click
を同時に押して、目的の列と行を選択します。この助けを願っています
これがJavaを使用したポータブルなソリューションです
もちろん、最初のステップは Javaのインストール
次に、以下をユーザーディレクトリ(C:\ Users\your_name)のTrimmer.Java
という名前のファイルに貼り付けます。
import Java.awt.*;
import Java.awt.datatransfer.*;
public class Trimmer{
public static void main(String... lines) throws Exception{
Clipboard clip = Toolkit.getDefaultToolkit().getSystemClipboard();
String str = (String)clip.getContents(null).getTransferData(DataFlavor.stringFlavor);
lines = str.split("\n");
str = "";
for(String line: lines) str += line.trim() + '\n';
StringSelection selection = new StringSelection(str.substring(0,str.length()-1));
clip.setContents(selection,selection);
}
}
次に、コマンドプロンプトを開き、次のように入力します
javac Trimmer.Java
これで、同じフォルダーにTrimmer.classファイルが作成されます。 Trimmer.Javaファイルを今すぐ削除できます。
この時点で、クリップボードの各行から先頭と末尾の空白をすべて削除するプログラムがありますが、それでも便利に実行する方法が必要です。そのためのホットキーを作ろう!
まず、コマンドプロンプトへのショートカットを作成します(C:\ Windows\System32\cmd.exeを右クリックします)
次に、このショートカットを右クリックして、[プロパティ]を選択します。このウィンドウで行う必要のあることがいくつかあります。 [ショートカット]タブには、次のような[ターゲット]オプションがあります。
%windir%\system32\cmd.exe
それを言うように変更します
%windir%\system32\cmd.exe /C "Java Trimmer"
これにより、コマンドプロンプトはプログラムを実行し、このショートカットを使用すると終了します。
次に、[ショートカットキー]ボックスをクリックし、テキストの置換をトリガーするホットキーを押します。私はお勧め Ctrl+Shift+C 使いやすさのために!
最後に、ショートカットを使用するたびにウィンドウが画面上で点滅することを望まないため、[実行]オプションを[最小化]に変更します。
この後、次のワークフローを使用できるようになります。
何かが足りないかもしれませんが、他のすべての答えは解決策を複雑にしすぎているようです。私が正しく理解していれば、あなたがしたいのは先頭の空白(スペースまたはタブ)を削除することだけであり、メモ帳++で利用可能なデータがあります
その場合、解決策は簡単です。 _Notepad++ >> Search >> Replace... or Ctrl+H
_でファイルを開きます
何を見つけるか:^( *)[ ]|^\t*
置換 :空のままにします
^( *)[ ]
を使用してすべての先行スペースを検索し、すべての先行タブを検索するには、_^\t*
_を使用します。したがって、or演算子_|
_を使用してすべての先行スペースまたはすべての先行タブを検索します。 。置換ウィンドウで正規表現が選択されていることを確認してください。
大きなファイルであっても、かなり早く終了するはずです。置換ウィンドウを閉じて、すべて選択(Ctrl + A)>>コピー(Ctrl + C)
私の答えは、私が正しいとマークしたスティーブンの答えに基づいています(それでも、いくつか問題があり、編集が拒否されましたが、編集しようとしました)。
これは私にとって最もうまくいったコードです:
TrimClipboard()
{
linesArray := StrSplit(clipboard, "`n", "`r")
newClip := ""
for index, element in linesArray
{
newClip .= trim(element) . "`r`n"
}
clipboard := SubStr(newClip, 1, -2)
}
#IfWinActive ahk_class Notepad++
^c::
Send, ^{sc02e}
Clipwait
TrimClipboard()
return
^x::
Send, ^{sc02d}
Clipwait
TrimClipboard()
return
Send, ^c
とSend, ^x
をそれぞれSend, ^{sc02e}
とSend, ^{sc02d}
に置き換えました。これにより、ヘブライ語モードおよびその他の英語以外の言語モードでのテキスト削除のバグが防止されます。