vim에서 bash의 현재 줄 실행
이 질문은 Vim : 현재 파일을 실행 하시겠습니까? 와 유사 합니다. 하지만 현재 파일을 실행하는 대신 현재 행만 실행하고 싶습니다.
이것이 가능한가?
업데이트 : 이상적으로는 외피에 부작용이있을 수있는 솔루션을 찾고 있습니다. 예를 들어 다음 줄이 가정합니다.
alias foo=bar
정력 명령을 실행에서 한 후로 쉘을 시작 :sh
하면 별칭 foo
을 사용할 수 있지만 vim
사용을 종료 :q
하면 별칭을 더 이상 사용할 수 없습니다.
물론 현재 파일의 모든 내용을 다른 프로그램의 표준 입력에 '쓰기'할 수 있습니다.
:.w !bash
여기서 .
(w 앞의 부분)은 작성중인 줄의 범위를 넓며 .
현재 줄입니다. 그런 다음 !bash
해당 줄을 bash에 작성하는 데 사용 합니다.
나는 항상 이런 종류의 일을한다 :
:exec '!'.getline('.')
.vimrc에서 매핑을 생성 할 수도 있습니다.
nmap <F6> :exec '!'.getline('.')
Daan의 답변도 효과가 있습니다.
커서를 해당 줄로 이동하고 일반 모드에서 다음을합니다.
!!bash<cr>
댓글을 달 수있는 권한이 있습니다.
Vim의 현재 버퍼를 외부 명령으로 리디렉션 / 파이프 라인과 관련하여 Daan Bakker의 훌륭한 답변에 영감을 받아 Python 펼쳐 실행에 관한 질문에 대한 답변 ( https://stackoverflow.com/a/40002312/3625404 )을 작성 했다. 현재 버퍼).
전체 버퍼 실행 외에도 외부 명령을 통해 라인 범위를 실행하는 방법에 대해 설명합니다. 시간을 절약하기 위해 아래에 복사합니다.
#####################
vim에서는 현재 버퍼의 모든 범위를 외부 명령 (bash, python 또는 python 펼쳐보기)으로 리디렉션 할 수 있습니다.
# redirect whole buffer to python
:%w !python
현재 버퍼에 나오는 같이 두 줄이 안전하게 가정합니다.
import numpy as np
print np.arange(12).reshape(3,4)
그런 다음 :%w !python
저장 여부에 관계없이 실행됩니다. 터미널에 다음에 같이 인쇄합니다.
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
물론 일부 키맵과 같이 만들 수 있습니다.
nnoremap <F8> :.w !python<CR>
vnoremap <F8> :w !python<CR>
첫 번째는 인터프리터를 통해 현재 줄을 실행하고 두 번째는 선택을 실행합니다.
#!! be careful, in vim ':w!python' and ':.w !python' are very different, the
first write (create or overwrite) a file named 'python' with contents of
current buffer, the second redirect the selected cmdline range (here dot .,
which mean current line) to external command (here 'python').
cmdline 범위에 걸친
:h cmdline-ranges
cmdline 1이 아닌 일반 명령과 관련하여 아래가 아닙니다.
:h command-range
https://stackoverflow.com/a/19883963/3625404에서 영감을 얻었습니다.
이 매핑을 .vimrc 파일에 추가하십시오.
nmap <leader>E yyp:.!csh<CR>
설명 :
yy
Yank 현재 라인p
아래에 잡아 당긴 줄을 붙이십시오 (커서 가이 다음 행으로 이동).:.!csh<CR>
csh
새로 추가 할 넣은이 줄을 제자리에 실행 (사용 )합니다. 이 줄의 출력은 현재 줄을 대체하기 실행하기 전에 줄을 잡아 당기고 아래에 넣었습니다.
vi / vim 내의 텍스트 줄에 다음과 같은 명령이있는 경우 "
ls -la
줄의 아무 곳에 나 커서를 놓고 ":. !!" 리턴을 누르십시오.
즉, 콜론 닷 뱅뱅 리턴
그러면 vi / vim 내에서 현재 셸의 해당 줄에있는 텍스트가 실행되고 출력이 텍스트 파일에 삽입됩니다.
나는 그것이 당신이 요구 한 것이라고 생각하고 있습니까? 마법 같아요.
터미널에서 실행되는 다음 명령을 고려하십시오.
seq 0 10 | xargs printf "%02x "
예상 출력은 다음과 같습니다.
00 01 02 03 04 05 06 07 08 09 0a
위의 명령이 파일에 작성되어 있다고 가정하십시오. 이 명령을 실행하려면이 각각의 출력을 해당 파일에 다시 가져 오려면이 매핑을 .vimrc에 추가하면됩니다.
nmap <leader>E :exec 'r!'.getline('.')<CR>
위에서 언급 한 줄을 실행하려면 %
다음과 같이 ' '에 대한 이스케이프 문자를 추가하여 작성해야 합니다.
seq 0 10 | xargs printf "\%02x "
파일에서이 줄로 이동하고를 누릅니다 <leader>E
. 제 경우에는 <leader>
에 매핑 ,
되므로,E
참고 URL : https://stackoverflow.com/questions/19883917/execute-current-line-in-bash-from-vim
'ProgramingTip' 카테고리의 다른 글
C #에서 날짜를 비교하는 방법 (0) | 2020.12.11 |
---|---|
여러 파일을 찾아 Linux에서 이름 (0) | 2020.12.10 |
heredoc 확장 변수를 피하는 방법은 무엇입니까? (0) | 2020.12.10 |
Kotlin에서 null 검사를하는 가장 좋은 방법은 무엇입니까? (0) | 2020.12.10 |
Docker의 HyperKit에서 생성 한 VM에 액세스하는 방법은 무엇입니까? (0) | 2020.12.10 |