2009-04-21 4 views

답변

11
:g!/hello/ yank A 

선이 지금은 AP 통신에게 "할 붙여 넣기, 레지스터 A의 저장됩니다

편집 : 이 정력에 무엇을 의미하는지에 관심있는 사람들을 위해

:g!/hello/y A 

로 축약 할 수있다 :

: g = 글로벌 검색
! = 다음 부울 테스트의 부인
/hello/= "hello"와 일치하는 정규 표현식
y = 일치하는 각 줄에서 수행 할 명령.이 경우 "yank"
A = "yank"명령에 대한 인수를 등록하십시오. 이 경우 'a'를 등록하되 대문자로 바꾸는 대신 레지스터에 추가하십시오.

+3

: v는 다음과 같습니다. g! – sjh

+0

우, 그 dysmsyd 주셔서 감사합니다. 나는 실제로 그것을 많이 사용할 것이다. – bfabry

+0

당신의 대답은 나머지 질문에 답하는 것 같지 않습니다 : "파일". 현상금으로 응답을 재평가 해 봅시다. –

9

시스템에 grep을 제공, 당신은이 명령을 사용할 수 있습니다 : 내가 좋아하는 뭔가를 찾고 있어요

:!grep -v hello % > file 
+0

'%'는 그렙에 대한 특수 문자가 아닙니다, 그것은 정력 명령 행을위한 특수 문자, 참조 :이 같은 문제에 나보다 훨씬 짧은 명령이있는 CmdLine 특수 – user55400

5

을 나는 보통

:g/hello/d 

의 일부 변동이 작업을 수행 즉, "hello"가 포함 된 모든 것을 삭제하고, 선택하거나, 수행 할 필요가있는 것을 선택하고, 마지막으로 u를 다시 누르십시오. 나는 이것이 명령 라인 파이프를 만드는 데 정신적으로 덜 부정적임을 알게되었다.

+0

도움이됩니다. –

1

선택하여 새 파일에 쓰기 :

:g/hello/ . w!>> file 
+0

+1 -하지만 hello를 포함하지 않는 모든 행을 선택하려면 해당 g /를 v /로 전환해야합니다. – rampion

+2

. 평균? –

0

이 레지스터 'A'에서 '안녕하세요'이없는 모든 라인이있을 것이다

:let @a='' | g!/hello/normal "Ayy 
빔 명령 후. 당신은 AP 일반 명령 "으로 값을 붙여 넣거나

:let @*[email protected] 

와 시스템 클립 보드에이 값을 넣어 그리고 당신은 맥 OS 또는 '마우스 가운데에서 Windows 또는'Cmd를 + V '에서 다음'Ctrl 키 + V '를 사용할 수 있습니다 '. 텍스트를 붙여 리눅스에

마법의

간략한 설명 :

@a이 값에 바인딩 된 빔 변수에 저장된'을 클릭합니다.에 '등록
을 " ap, "bp, "cp, .. 특정 레지스터의 값을 지난 Vim 일반 모드의 키 조합입니다.
@ *은 시스템 클립 보드에 바인딩 된 Vim 변수입니다.
@ a = @a 레지스터에서 'a'값을 시스템 클립 보드로 보냅니다.

이 파일을 .vimrc 파일에 추가하거나 플러그인 디렉토리를 사용하여 파일을 만듭니다.

function s:copy_unmathced_lines(pattern) 
    let result_lines = [] 

    for line in getline(1, '$') 
     if line !~ a:pattern 
     call add(result_lines, line) 
     endif 
    endfor 

    let @* = join(result_lines, "\n") 
endfunction 

command -nargs=1 CopyUnmatchedLines call s:copy_unmathced_lines(<q-args>) 

사용 사례는 간단하다

CopyUnmatchedLines hello 

하고 그냥 편집기에서 붙여 넣기 명령을 사용합니다.

+0

이 답변은 매우 시원하지만 어떻게 든 이해하기 어렵습니다. 아마도 누군가가 상황에서 어떻게 작동하는지 답장에서 명확히 할 수 있습니다. "@a"와 "let"과 같은 이상한 것들은 무엇입니까? 전, vim 또는 다른 것? –

6

내가 지금까지 언급하지 않은 대안은 redirecton입니다. V

너무 일치하지 않는 행을 선택합니다 :

그래서 귀하의 경우에이

:redir > file 
:g!/hello/ 
:redir END 

:help redir 
:help verbosefile 
4

FGM의 대답은 거의 다

이었다 참조 할 것 다음은 "hello"를 포함하지 않는 행을 eee라는 파일에 추가하여 i 필요한 경우 t.

:v/hello/ . w!>>eee 
0

Blixtor의 미리보기와 실제적인 예 :와 손실 이메일 친구 "verbosefile".

I. 수동 개방 ": 전자/tmp를/new_file"및 "시간 verbosefile"그럼 blixtor의 팁 - 고양이 복사하자

:redir > /tmp/verbosefile_instructions 
:g/verbosefile/ 
:redir END 

II를. 귀하의 이메일 레그 (legth)에 관한 표준 규칙을 따르고 다음과 같은 표준 인사말을 제공한다고 확인하십시오.

:match ErrorMsg /\%>73v.\+/ 
:so /bin/greetings.vim 

III. Mutt로 파일을 보냅니다. 시각적 인 선택과 복사에 대한

0

예 : 당신이 부분을 분리한다고 가정 :

  1. 시각-선택 그것을하고 Enter 키를 누릅니다 ":"

  2. 다음 명령을 사용합니다

    : '<,'>! > ../new_file_in_a_subdirectory

오류 : 색상이 파일에 복사되며, 실제로 잘라 내기 및 붙여 넣기 오히려 대처하지 않습니다.

1

꽤 똑바로;

:v/hello/ |redir >> file