vim — 파일에서 현재 버퍼로 줄 범위를 읽는 방법
foo.c 파일에서 현재 버퍼로 n1-> n2 줄을 읽고 싶습니다.
나는 시도했다 : 147,227r /path/to/foo/foo.c
하지만 "E16 : 유효하지 않은 범위"라는 메시지가 표시되지만 foo.c에 1000 개 이상의 행이 포함되어 있다고 확신합니다.
:r! sed -n 147,227p /path/to/foo/foo.c
sed와 같은 외부 도구를 사용하지 않고도 순수한 Vimscript에서 할 수 있습니다.
:put =readfile('/path/to/foo/foo.c')[146:226]
배열은 0부터 시작하고 줄 번호는 1부터 시작하므로 줄 번호에서 1 을 줄여야 합니다 .
단점 :이 솔루션은 허용 된 답변보다 7 자 더 길며 다른 파일의 크기에 비해 일시적으로 메모리를 소모합니다.
{range}는 소스 파일의 행 범위가 아니라 현재 파일의 대상을 나타냅니다.
약간의 실험 후
:147,227r /path/to/foo/foo.c
이 파일에서 227 행 뒤에 내용을 삽입하는/path/to/foo/foo.c
것을 의미 합니다. 즉 : 147을 무시합니다.
게시 된 다른 솔루션은 특정 라인 번호에 적합합니다. 다른 파일의 맨 위 또는 맨 아래에서 읽으려는 경우가 종종 있습니다. 이 경우 머리 또는 꼬리의 출력을 읽는 것이 매우 빠릅니다. 예를 들면-
:r !head -20 xyz.xml
xyz.xml에서 커서가있는 현재 버퍼로 처음 20 줄을 읽습니다.
:r !tail -10 xyz.xml
xyz.xml에서 커서가있는 현재 버퍼로 마지막 10 줄을 읽습니다.
head 및 tail 명령은 매우 빠르므로 이들을 결합하는 것조차 매우 큰 파일에 대한 다른 접근 방식보다 훨씬 빠를 수 있습니다.
:r !head -700030 xyz.xml| tail -30
xyz.xml 파일에서 현재 버퍼로 700000에서 700030까지의 줄 번호를 읽습니다.
이 작업은 상당히 큰 파일의 경우에도 즉시 완료됩니다.
다음을 수행해야합니다.
:r /path/to/foo/foo.c
:d 228,$
:d 1,146
세 단계이지만 완료됩니다 ...
내 코드 프로젝트에서이 작업을 수행해야했고 다음과 같이했습니다.
열린 버퍼에서 /path/to/foo/foo.c
:
:147,227w export.txt
버퍼에서 나는 다음과 같이 일하고 있습니다.
:r export.txt
내 책에서 훨씬 더 쉽게 ... 두 파일을 모두 열어야하지만, 한 세트의 행을 가져 오는 경우 일반적으로 두 파일을 모두 여는 것이 일반적입니다. 이 방법은 더 일반적이고 기억하기 쉽습니다 g/<search_criteria/:.w >> export.txt
.
범위는 명령이 현재 버퍼의 라인 그룹에 적용되도록 허용합니다.
따라서 읽기 명령어의 범위는 현재 파일에서 내용을 삽입 할 위치를 의미하지만 읽으려는 파일 범위는 아닙니다.
'UFO ET IT' 카테고리의 다른 글
SQL에서 테이블의 스키마 이름 변경 (0) | 2023.04.08 |
---|---|
Windows PowerShell에서 현재 사용자 이름을 얻으려면 어떻게 해야 합니까? (0) | 2023.04.08 |
함수 프로토 타입을 C로 선언해야합니까? (0) | 2021.01.17 |
홈 페이지로 리디렉션하는 방법 (0) | 2021.01.17 |
자바 스크립트로 현재 HTML 페이지 제목을 얻는 방법 (0) | 2021.01.17 |