메모장 ++에서 클립 보드로 복사 한 데이터에서 선행 들여 쓰기 (탭 및 공백)를 제거하는 방법이 필요합니다.
메모장 ++ 문서 자체의 데이터는 이러한 선행 들여 쓰기를 유지해야하며 클립 보드에 복사 된 데이터는 없어야합니다.
이 동작은 CTRL + C 단독으로 시작해야하며 메모장 + + 안에있을 때만 시작해야합니다.
마우스로 텍스트를 정기적으로 표시하면 메모장 ++에서 발생합니다.
텍스트를 정기적으로 표시하고 복사 한 후 클립 보드에 있어야합니다.
노트:
- 이미지는 내 요구를 더 잘 설명하기 위해 실제 코드가 더 길다.
- 나는 또한 이것에 대해 여기에 물었다 .
- 이 코드 블록에 heredocuments가 포함 된 경우 들여 쓰기 된 코드 블록을 Linux 터미널에 붙여 넣을 수 없기 때문에이 질문을합니다
cat
(heredocument 구분 기호 처리, 긴 이야기와 관련이 있음).
답변
다음 AutoHotKey (AHK) 스크립트를 고려하십시오 . 오토 핫키 스크립트에 대한 자세한 설명은 오토 핫키 튜토리얼 및 설명서를 참조하십시오 .
AutoHotkey를 설치 후, 키를 누릅니다 Ctrl+ Shift+ c또는 x트림 라인으로 클립 보드에 복사 (또는 잘라 내기)하는 메모장 + + 내.
참고 : 원본 사본을 계속 사용하고 정상적으로 잘라낼 수 있도록 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
편집하다:
전체 열 또는 하나 이상의 열을 선택할 수도 있고 하나 이상의 행을 선택할 수도 있습니다.
간단한 방법은 다음과 같습니다.
-
원하는 선택의 시작 부분에서 마우스 왼쪽 버튼을 클릭하십시오.
-
원하는 선택을 중지해야하는 위치로 이동
-
다음을 사용하여 커서를 해당 두 번째 및 최종 위치로 이동하십시오.
- 온 히트
ALT
+의SHIFT
키와left click
동시에이 원하는 열과 행을 선택합니다.
- 온 히트
이 도움을 바랍니다
답변
다음은 Java를 사용하는 휴대용 솔루션입니다.
첫 번째 단계는 물론 Java를 설치하는 것입니다
그런 다음 Trimmer.java
사용자 디렉토리 (C : \ Users \ your_name)에 이름이 지정된 파일에 다음을 붙여 넣습니다 .
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를 추천 합니다!
마지막으로, “실행”옵션을 “최소화”로 변경하십시오. 단축키를 사용할 때마다 화면이 창에서 깜박이지 않게하기 때문입니다.
이 모든 작업을 마치면 다음과 같은 워크 플로를 사용할 수 있습니다.
- 를 사용하여 텍스트 복사 CtrlC
- Ctrl+ Shift+를 사용하여 텍스트 자르기C
- 잘라낸 텍스트를 사용하여 붙여 넣기 CtrlV
답변
어쩌면 나는 뭔가를 놓치고 있지만 다른 모든 대답은 솔루션을 지나치게 복잡하게하는 것처럼 보입니다. 올바르게 이해하면 선행 공백 (공백 또는 탭)을 제거하고 메모장에서 데이터를 사용할 수 있습니다.
어떤 경우에는 해결책이 간단합니다. 에서 파일을여십시오Notepad++ >> Search >> Replace... or Ctrl+H
무엇을 찾기 :^( *)[ ]|^\t*
로 교체 : 비워 두십시오
우리가 사용하는 모든 선행 공간 ^( *)[ ]
을 찾고 모든 주요 탭 ^\t*
을 찾기 위해, 또는 우리가 사용하는 모든 선행 공간 또는 모든 주요 탭을 찾기 위해, 또는 연산자를 사용합니다 |
. 바꾸기 창에서 정규식 이 선택되어 있는지 확인하십시오 .
파일이 크더라도 빨리 완료해야합니다. 바꾸기 창을 닫고 모두 선택 (Ctrl + A) >> 복사 (Ctrl + C)
답변
내 대답은 내가 옳은 것으로 표시 한 Steven의 대답을 기반으로합니다 (그러나 몇 가지 문제가 있었지만 편집이 거부되었지만 편집하려고했습니다).
이것은 나에게 가장 적합한 코드입니다.
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
Steven의 원본 코드와의 차이점 :
- 어떤 이유로 스크립트를 중단했기 때문에 명령 헤드에서 SendMode Input을 제거했습니다.
- 개인적으로 대부분의 시간없이 일하는 것을 선호하기 때문에 두 키 콤보에서 Shift 키를 제거했습니다.
- 나는 대체
Send, ^c
와Send, ^x
와Send, ^{sc02e}
와Send, ^{sc02d}
각각. 히브리어 모드 및 영어 이외의 다른 언어 모드에서 텍스트 삭제 버그를 방지합니다. - 의견을 삭제했습니다.