나는 사용했다moreutils
Kit를 몇 번 사용해 본 결과 기본 유틸리티에 대해 더 깊이 생각해 볼 수 있는 통찰력이 있고 재미있다는 것을 알았습니다. 예를 들어,vipe
vim
파이프라인 중간에 편집기와 같은 작업을 실행하고 실행을 계속하기 전에 데이터를 편집할 수 있습니다1 . 예를 들어:
function refcheck_vipe() { echo -n "$@ documentation last udate: "; links -dump "http://www.gnu.org/software/$@/manual"| vipe | grep 'last updated' | vipe | cut -d ' ' -f 7,8,9 | vipe ; }
# refcheck_vipe grep
time(3)이 vipe
파이프라인에 임의로 배치되어 호출될 때마다 데이터는 vim에서 렌더링되고 일단 종료되면 실행이 계속됩니다. 그래서 여기서 당신은 얻을 것이다웹 페이지, 일치철사결국 격리됨끈. 어쩌면 빠진 것은 어떤 경우에는 내용을 비교하기 위해 사용된 버퍼를 유지한다는 것입니다...
난 당신이 할 수 몰랐어요멀티플렉싱vim
(!)의 버퍼 레이아웃입니다. 이제 vim에서 명령을 시작하고 싶은지 알고 싶습니다.명령줄, 각 vipe 실행 "단계"를 다른 버퍼로 리디렉션하는 방법이 있습니까? 그리고 tmp
종료한 후에도 파일이 계속 콘텐츠를 표시하도록 허용합니다. 사실 다음 "단계"로 넘어가기 위해서는 그렇게 해야 하는데 :q
, 방금 말씀드린 내용을 어떻게 이것과 일관되게 만들 수 있을지 모르겠습니다. 반면에 나는 :split new
이것을 할 수 :r! ls
있고 그 출력도 포함된다는 것을 알았습니다.
맥락을 요약하고 추가하기 위해 다음과 같은 것을 생각하고 있습니다.
command1 | vipe1 | command2 | vipe2 | command n | vipe n
would be wrapped by the answer to produce this in vim(the vipe part):
-------------------------
| | | | A buffer would open to the right side
| vipe | vipe | vipe | for every vipe command in the pipeline.
| step1 | step..| step n|
| | | |
| | | |
-------------------------
| | | Bottom left you see a "file manager".
|find . | \ | whatever | Its contents could be refreshed, from
|vidir - | | time to time.
-------------------------
:cli
나는 vim
그것이 하나가 아니라는 것을 안다.창 관리자또는멀티플렉서. 여기서의 목표는 vim 기술을 향상시키면서 쉘 명령으로 데이터 조작을 시연하는 것입니다2 . 요점은 EDITOR 변수를 vim
읽으면 vipe
익스플로잇에 대해서도 관심이 있을 것입니다 emacs
.
그렇다면 제가 설명한 내용을 달성하기 위해 구현할 수 있는 별칭/함수/설정이 있습니까(파이프라인의 각 명령에 대해 편집기 오른쪽에 버퍼를 시각적으로 추가하여 vipe
출력을 비교할 수 있는 통합된 방법을 허용함) 획득)?
1. 일부 명령을 정규 표현식과 함께 연결했는데 작동하지 않으면(일반적인 경우) 문제를 격리할 수 있을 때까지 역추적하여 명령을 제거하고 파이프라인의 표현식을 단순화합니다. 따라서 vipe
어떤 경우에는 도움이 될 수 있습니다.
2. 시스템을 사용해야 하는 상황에 대한 대응 외에,언박싱또는i3존재하지 않는다!
[..]는 참조되지 않지만 코드 예제에는 나타납니다.vidir
.
답변1
vipe는 (나를 위한 /tmp
) 임시 파일을 사용하여 Vim과 콘텐츠를 연결합니다. 파이프 때문에 이전 vipe 호출은 더 이상 다시 편집될 수 없습니다. 이미 vipe에 의해 다시 읽혀서 파이프로 전송되었습니다. 따라서 이전 vipe 임시 파일을 저장하고(원본 파일이 vipe에 의해 삭제되었으므로) 다음 번 vipe에서 Vim이 호출될 때 파일을 다시 열면 충분합니다.
다음 자동화된 명령은 단일 이전 파이프라인 단계에 대해 이 작업을 수행합니다. vipe 임시 파일의 어떤 패턴도 인식하지 못하기 때문에 이는 vipe /tmp
에서 열린 모든 파일을 광범위하게 처리합니다. 별도의 디렉터리나 고유한 명명 체계를 사용하도록 vipe를 재구성하는 것이 더 좋을 것입니다(최신 vipe 버전은 이를 지원하므로 --suffix SUFFIX
로 변경할 수 있습니다 *
) *.SUFFIX
.
스케치
autocmd BufWritePost /tmp/* silent! bdelete ~/.previous-vipe | keepalt write! ~/.previous-vipe
autocmd BufRead /tmp/* pedit ~/.previous-vipe