다음은 대략 vim에서 수행하려는 작업입니다.
:let g:ID = 1
:%s/^/\= g:ID | let g:ID = g:ID * 1.2/
이제 vim이 막대 뒤의 모든 let g:ID = g:ID * 1.2
부분을 분해하는 것처럼 보입니다 (즉 부분).
물론 g : ID에 1.2를 곱하고 g : ID의 값을 반환하는 함수를 작성할 수는 있지만 이것을 포기하고 싶습니다.
고마워 르네
명확성을 위해 편집 :
vim-script 에서 막대 (|)를 사용하여 연결하면 한 줄 에 여러 명령문을 작성할 수 있습니다. 그래서 대신
let g:ID = 20
let g:ID = g:ID * 1.2
let g:ID = g:ID * 1.2
나는 또한 쓸 수 있었다
let g:ID = 20 | let g:ID = g:ID * 1.2 | let g:ID = g:ID * 1.2
이제 \ = 일을하면 정규 표현식을 vim 스크립트 표현식으로 대체 할 수 있습니다. 예를 들어, 나는 할 수 있습니다
:%s/ABC/\=line(".")/
현재 버퍼에서 ABC의 모든 발생을 찾은 줄 번호로 바꿉니다.
마찬가지로
:%s/^/\=g:ID/
내 버퍼의 각 줄 시작 부분에 현재 g : ID 값을 씁니다.
그것은 모두 훌륭하고 멋지지만 대체 부분에 둘 이상의 표현을 갖고 싶습니다. 그러한 표현을 막대와 연결하여 달성 할 수 있는지 궁금합니다. 제 경우에는 모든 대체 호출 후 g : ID를 조작하고 싶습니다.
:let g:ID=20
:s/^/\=g:ID|let g:ID=g:ID * 1.2/
내 버퍼의 첫 번째 줄의 시작 부분에 20, 내 버퍼의 두 번째 줄의 시작 부분에 24, 내 버퍼의 세 번째 줄의 시작 부분에 28.8 등을 쓰면됩니다.
나는 지금 나 자신을 더 명확하게했으면 좋겠다.
\=
됩니다. 아니면 정확히 하나의 표현입니다. |
는 명령 구분 기호이며, 사용해야 let
할 경우 함수가 필요하거나 (예 :에서 사용해야하는 경우 s/RE/\=EXPRESSION/g
) :g
@peth가 제안한대로입니다. 이것은 골프 골프 질문입니까? ;-)