커서 앞에 복사하고 뒤에 붙여넣는 Bash 명령이요?

커서 앞에 복사하고 뒤에 붙여넣는 Bash 명령이요?

어떻게 표현해야 할지 모르겠지만, 다음과 같은 명령어를 치는 자신을 종종 발견합니다.

cp /etc/prog/dir1/myconfig.yml /etc/prog/dir1/myconfig.yml.bak

저는 보통 경로를 두 번 입력하거나(탭 완성 기능 사용) 커서를 사용하여 경로를 복사하여 붙여넣습니다. 타이핑을 더 쉽게 해주는 bashfoo가 있나요?

답변1

많은 트릭이 있지만(중복도 찾을 수 있을 것 같습니다) 이를 위해 저는 이렇게 하는 경향이 있습니다.

cp /etc/prog/dir1/myconfig.yml{,.bak}

귀하의 명령에 따라 확장됩니다.

이것은 ... 불리운다버팀대 확장. 여기에 사용된 형식에서 {}표현식은 쉼표로 구분된 여러 문자열을 지정합니다. 이는 전체 /etc/prog/dir1/myconfig.yml{,.bak}표현식을 "확장"하여 {}부분을 각 문자열로 차례로 대체합니다. 빈 문자열은 주어진 /etc/prog/dir1/myconfig.yml, 다음은 .bak주어진 입니다 /etc/prog/dir1/myconfig.yml.bak. 밝혀지다

cp /etc/prog/dir1/myconfig.yml /etc/prog/dir1/myconfig.yml.bak

다음 표현식은 중첩될 수 있습니다.

echo a{b,c,d{e,f,g}}

생산하다

ab ac ade adf adg

숫자를 사용하여 시퀀스를 생성하는 변형이 있습니다.

echo {1..10}

생산하다

1 2 3 4 5 6 7 8 9 10

단계를 지정할 수도 있습니다.

echo {0..10..5}

생산하다

0 5 10

답변2

히스토리 확장은 이런 종류의 작업에 유용합니다(bash 히스토리가 활성화되어 있다고 가정).

귀하의 예에서는 다음을 수행할 수 있습니다.

cp /etc/prog/dir1/myconfig.yml !#:1.bak

여기서는 !#현재 줄을 참조하고, !#:1현재 줄의 매개변수 1을 참조하고, 현재 줄의 매개변수 1을
참조하고 , 마지막으로 ".bak"를 추가합니다.!#:1.bak

기록 지정자를 입력할 때 파일 이름을 다시 확인하거나 수정하려는 경우 Ctrl++를 사용하여 실제 값으로 확장할 수 있습니다.AltE

더 많은 정보는 bash 매뉴얼 페이지의 "History Extensions" 섹션에서 확인할 수 있습니다.

답변3

progo의 답변과 유사하지만 약간 더 간단합니다. C-w커서 왼쪽에 있는 단어를 잘라내고("kill") C-y다시 삽입("yank")합니다.

$ cp /etc/dir1/myconfig.yml█                              (C-w)
$ cp █                                                    (C-y)
$ cp /etc/dir1/myconfig.yml█                              (space, C-y)
$ cp /etc/dir1/myconfig.yml /etc/dir1/myconfig.yml█       (finish text)
$ cp /etc/dir1/myconfig.yml /etc/dir1/myconfig.yml.bak█

답변4

tcsh또는 에서 패턴( 위젯) 의 마지막 단어를 삽입합니다 zsh.Alt+Ctrl+_emacscopy-prev-word

cp 매우 긴 Alt+Ctrl+_경로.뒤로

bash위젯(기본적으로 어떤 키에도 바인딩되지 않음) 이 있지만 단어를 링 버퍼에만 복사하므로 위젯 을 꺼내려면 (모드에서 ) 키를 copy-backward-word눌러야 합니다 . 하지만 다음과 같이 할 수 있습니다.Ctrl-Yemacs

bind '"\e[cpw~": copy-backward-word'
bind '"\e\C-_": "\e[cpw~\C-Y"'

Alt+Ctrl+_복사/스나프 및 붙여넣기/복사는 / 처럼 수행되어야 합니다 .tcshzsh

관련 정보