Python 문을 사용하여 현재 줄을 수정하는 다음 샘플 코드가 있습니다.
:py import vim; vim.current.line="["+vim.current.line+"]"
현재 파일의 각 줄에 대해이 문을 어떻게 실행할 수 있습니까?
관련 : 어떻게 빔 파이썬을 사용할 수 있습니까? 스택 오버 플로우
Python 문을 사용하여 현재 줄을 수정하는 다음 샘플 코드가 있습니다.
:py import vim; vim.current.line="["+vim.current.line+"]"
현재 파일의 각 줄에 대해이 문을 어떻게 실행할 수 있습니까?
관련 : 어떻게 빔 파이썬을 사용할 수 있습니까? 스택 오버 플로우
답변:
pydo
Vim 7.4부터 사용 가능한 명령을 사용할 수 있습니다 . 설명서에는 내가 할 수있는 것보다 어떻게 작동하는지 설명되어 있습니다.
: [범위] 피도 {본문}
[range]의 각 줄에 대해 파이썬 함수 "def _vim_pydo (line, linenr) : {body}"를 실행합니다. 함수 인수는 <EOL>과 현재 줄없이 차례로 각 줄의 텍스트로 설정됩니다. 줄 번호. 이 함수는 문자열 또는 None을 반환해야합니다. 문자열이 반환되면 현재 턴에서 줄의 텍스트가됩니다. [range]의 기본값은 전체 파일 "1, $"입니다.
예를 들어 다음과 같은 명령을 사용할 수 있습니다.
:python import vim
:pydo vim.current.buffer[linenr - 1] = '[%s]' % line
linenr - 1
의 행 때문에 비트가 vim.current.buffer
0 인덱싱하지만 빔이 1 라인을 계산하기 시작한다.
좋은 점은 다양한 행에서 Python 코드를 실행하는 사용자 정의 명령을 쉽게 정의 할 수 있다는 것입니다.
command! -range=% BracketLines
\ <line1>,<line2>pydo vim.current.buffer[linenr - 1] = '[%s]' % line
를 사용하여 현재 버퍼를 얻을 수 있습니다 vim.current.buffer
. for
루프를 사용하여 각 줄을 얻을 수 있습니다 .
행을 지정하여 행을 변경할 수 있습니다. 이렇게 정리하면 다음과 같은 이점이 있습니다.
:py from vim import *
:py for i, line in enumerate(current.buffer): current.buffer[i] = '[%s]' % line
도 참조하십시오 :help python-buffer
.