Vim에서 수행하는 방법 :
전에:
aaa
bbb
ccc
ddd
eee
fff
후:
aaa
ccc
eee
Vim에서 수행하는 방법 :
전에:
aaa
bbb
ccc
ddd
eee
fff
후:
aaa
ccc
eee
답변:
이를 위해 매크로를 사용할 수 있습니다. 다음을 수행하십시오.
gg.qq.dd뒤를 누릅니다 .q.10000@q추신 : 명령 모드로 이동하려면 Escape를 몇 번 누르십시오.
:g/^/+d사용자 stackoverflow.com/users/254635/ib(bellow )에서이 문제를 해결하는 더 우아한 방법입니다.
작업을 수행하는 우아하고 효율적인 방법은 :+delete명령을 사용하여 모든 줄에서 현재 줄 다음 줄을 제거하는 명령 을 호출하는 것입니다 :global.
:g/^/+d
:1d|g/^/+d. 홀수 줄을 삭제합니다.
주어진 일반 모드 명령을 사용 :normal하거나 :norm실행할 수 있습니다 . 출처.
:%norm jdd
%norm ddj홀수 행을 삭제하려는 경우 왜 작동하지 않는지에 관심이 있습니다.
에서 VIM 메일 아카이브 :
:let i=1 | while i <= line('$') | if (i % 2) | exe i . "delete" | endif | let i += 1 | endwhile
(vim 명령 줄에서 한 줄에 입력하려면 1,3,5,7, ... 행을 삭제합니다.)
!perl -ne 'print unless $. % 2':-)
if (expression)모든 세 번째 줄에도 적용되는 유연성 때문에 +1 .
:%!awk -- '++c\%2'
대안으로
:%!awk -- 'c++\%2'
제거하려는 절반에 따라 다릅니다.
NR변수를 사용하지 않는 이유는 무엇입니까?
:%!awk NR\%2또는 :%!awk 1-NR\%2, 다른 댓글에 게시했습니다. 그것은 거의 길지 않습니다.
1-NR보다 깁니다 c++. 네, 한 캐릭터라는 걸 알아요. 내가 말했듯이 – 진짜 이유는 내가 그것을 잊었 기 때문입니다. 어쨌든 사람들은 여기에서 awk의 아름다움에 감사하지 않는 것 같습니다.
NR보다 짧습니다 ++c:)
다음과 같이 Vim의 자체 검색 및 대체 기능을 사용할 수 있습니다. 커서를 첫 번째 줄에 놓고 일반 모드로 입력합니다.
:.,/fff/s/\n.*\(\n.*\)/\1/g
.,/fff/대체의 범위이다. "이 줄에서 정규식과 일치하는 줄 fff(이 경우 마지막 줄) 까지"을 의미 합니다.s///대체 명령입니다. 정규식을 찾고 모든 항목을 문자열로 바꿉니다. g단부 수단으로는 긴 정규식 발견되는 유지로 교체를 반복한다.\n.*\(\n.*\)은 줄 바꿈, 전체 줄 ( .*줄 바꿈을 제외한 모든 문자와 일치), 다른 줄 바꿈 및 다른 줄과 일치합니다. 괄호\( 와\) 표현식이 기록되도록하므로 나중에 \1.\1 그룹화 된 줄 바꿈과 그 뒤에 줄을 삽입합니다. 왜냐하면 다음 줄도 사라지는 것을 원하지 않기 때문입니다. 우리는 대체 메커니즘이 지나가길 원하므로 다음 대체에서 삭제하지 않습니다.이렇게하면 삭제를 수행 할 범위를 제어 할 수 있으며 외부 도구를 사용할 필요가 없습니다.
$대신 /fff/파일의 내용에 관계없이 파일 끝의 경우.
또 다른 접근 방식으로 vim이 지원하는 경우 파이썬을 사용할 수도 있습니다.
:py import vim; cb = vim.current.buffer; b = cb[:]; cb[:] = b[::2]
b = cb[:]현재 버퍼의 모든 행을에 임시로 복사합니다 b. b[::2]버퍼에서 매 두 번째 줄을 가져 와서 현재 버퍼 전체에 할당합니다 cb[:]. b버퍼 객체가 확장 된 슬라이스 구문을 지원하지 않는 것 같으므로 복사 가 필요합니다.
이것은 아마도 "vim 방식"은 아니지만 파이썬을 알고 있다면 기억하기 더 쉬울 것입니다.
당신은 vim에서 이것을 시도 할 수 있습니다
:1,$-1g/^/+1d
더 명확하게해볼 게 (두 부분)
첫 번째 부분 선택 범위 ( :from,to)
두 번째 부분 작업 ( d삭제)
:1,$-1 )g) delete ( +1d) 다음 줄파일의 첫 번째 줄로 이동하고 실행 :+1d하면 다음 줄이 사라지는 것을 볼 수 있습니다.
나는 그것이 진흙탕이라는 것을 알고 있지만 그것은 vim이고 작동합니다.