문제

10자가 위의 줄에서 처음 10 자와 특정 패턴과 일치하는 라인의 첫 10자를 어떻게 교체 할 수 있습니까?

편집 : 경기가 줄 내부에 나타날 수있는 첫 10자를 교체하라고 요청했는지는 확실하지 않았 으므로이 케이스를 처리하는 경우 답변에 메모를 할 수 있습니다 (이 케이스 B와 의도 한 사람에게 호출하십시오. 케이스 A?)

도움이 되었습니까?

해결책

사전 랩 :

:%s/^\(.\{10}\)\(.*\n\)abcdefghij\(.*\)/\1\2\1\3/

여기서 'abcdefghij'는 2 라인의 10 문자열입니다.

다른 팁

이와 같은 것이 효과가 있습니다.

%s/^.\{10\}/\=strpart(get(getbufline("", line(".")-1), 0, ""), 0, 10)/

어디 ^.\{10\} 당신의 실제 패턴입니다.

%s/                      # substitute all lines matching…
^.\{10\}                 # your pattern
/                        # …with…
\=                       # an expression:
strpart(                 # gets the part of a string
  get(                   # gets an element of a list
    getbufline(          # gets a list of lines from the current buffer
      "", line(".")-1)   # getbufline() the line before the current line
  , 0, "")               # get() first line in buffer, default to ""
, 0, 10)                 # strpart() first ten characters
/                        # …end of substitution
:2,$g/<pattern>/s/^.\{10}/\=strpart(getline(line(".")-1),0,10)
  • 2,$ 우리의 범위입니다 (첫 번째 줄에는 이전 줄이 없기 때문에)
  • g// 주어진 패턴과 일치하는 라인에서 명령을 실행할 수 있습니다.
  • s/^.\{10}/ 라인의 처음 10자를 대체합니다
  • \= VIM 표현의 결과를 :s//
  • line(".") 현재 줄 번호입니다
  • getline(line(".")-1) 이전 줄의 텍스트입니다
  • strpart(getline(line(".")-1),0,10) 이전 줄의 첫 10 자입니다

예를 들어 2,$g/frog/s/^.\{10}/\=strpart(getline(line(".")-1),0,10) 바뀔 것이다:

나는 먹는 것을 좋아한다ing mangos
프라이 전에ing frogs legs
나는 내가 h를 바란다ad a puppy
그녀는 d를 주었다ad a frog

이에:

나는 먹는 것을 좋아한다ing mangos
나는 먹는 것을 좋아한다ing frogs legs
나는 내가 h를 바란다ad a puppy
나는 내가 h를 바란다ad a frog

이와 같은 복잡한 행동이 있으면 일반적으로 q 명령. (테스트되지 않은)와 같은 것 :

/<pattern>
qq
10x
k
10yl
j
P
n
q

그런 다음 거시적으로 반복적 인 문제 @q 선택적으로 카운트로 접두사.

검색 및 교체를 사용할 수 있습니다.

:7,9 s/foo/bar/c

이 예제는 7 행에서 9 행에서 'foo'가 발생할 때마다 검색하고 'bar'로 대체하여 각 히트에 대한 확인을 요청합니다. 확인하고 싶지 않다면 마지막에 C를 떨어 뜨립니다. 적합한대로 범위를 선택하면 원하는 곳으로 가져 가야합니다.

VIM의 움직임과 YANKING/PASTING 만 사용합니다. 파일 내용이 ..

1234567890abcdef
qwertyuiopasdfgh

Q의 커서와 함께 10x, 파일이됩니다 :

1234567890abcdef
asdfgh

커서를 첫 번째 줄로 이동하십시오 (사용 k 그렇게 할 것입니다), 그렇게 할 것입니다 10yl (Yank 10 캐릭터, 맞습니다)

그런 다음 한 줄 아래로 이동하고 j, 그리고 붙여 넣기 P (대문자, 커서 아래에 붙여 넣기) 파일이 다음과 같습니다.

1234567890abcdef
1234567890asdfgh

요컨대, Q의 커서부터 시작합니다.

10xk10yljP

.. 당신이 붙여 넣거나 할당 할 수있는 것 매크로에

덮어 쓰기로 붙여 넣을 분명한 단축키가 있다면 더 짧을 지 모르지만 그런 것을 찾을 수 없었습니다.

다른 옵션 중 하나는 엄청나게 모호한 regex 검색/교체입니다 ..

비주얼 라인 두 개의 대상 라인을 선택하고 다음 검색 및 재구점을 실행합니다.

:'<,'>s/\(\(.\{10\}\).*\)\n\(.\{10\}\)\(.*\)$/\1\r\2\4/

기본적으로 .. 잡아 ..

  • \1 - 전체 첫 줄
  • \2 - 처음 10 자 (중첩 그룹)
  • 라인 브레이크
  • \3 - 2 행의 첫 10 자
  • \4 - 나머지 두 번째 줄

그런 다음 두 줄을 구성합니다 \1\n\2\4 - First Line, Linebreak, 첫 번째 10 자, 나머지 2 초

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top