신인을 작동하지 않는 행을 대체 vim 스크립트 :는 다음 작업을 수행 매핑을 작성하려고 VimL에
foo
|----> cursor
bar
baz
lr2j
가 baz
와 foo
을 repalce한다.
" replace the current line with a line given by a linewise motion
function! s:LineReplace(type)
if a:type !=# 'line'
return
endif
let saved_register = @@
silent execute "normal! S\<esc>my`]dd'yPjddk^ :delmarks y"
let @@ = saved_register
endfunction
nnoremap lr :set operatorfunc=<SID>LineReplace<cr>[email protected]
대신 나는
Error detected while processing function <SNR>108_LineReplace: line 5: E20: Mark not set
내가 아무 소용이 execute "normal! ..."
명령의 다른 순열을 시도했습니다 얻을. 누구든지 오류를 발견 할 수 있습니까?
normal
명령을 테스트 할 때 모든 것이 제대로 작동하고 'y
이라는 표시가 있다는 점에 유의해야합니다.
이 보이는 그 직후에 그것을 제거하십시오. 첫 번째'dd'는 마크를 죽인다. – xaizek
[wiki] (http://vim.wikia.com/wiki/Using_marks)에서'']'는 이전에 변경되었거나 홱 잡아 당겨 진 텍스트의 시작/끝 부분에 _jump입니다. 나는 그것을 모션의 최종 위치를 잡기 위해 사용 해왔다. 그러나 모션의 끝은 "이전에 변경되었거나 텍스트가 잡혀 있지 않습니다"... – yangmillstheory
변경 연산자보다 많은 범위를 저장하므로 사용법이 정확합니다. – xaizek