feedkeys () 를 사용하지만 미리 복구해야 합니다
3186 단어 vim-repeat
묘사
7.3.100 이전 Vim에'norm'이 있는 버그가 있는 것 같아서 돌아가서feedkeys를 사용하는 것이 좋다.사용자 정의 맵을 사용하여 이 점을 실현하기 위해서는 typeahead 버퍼의 나머지 부분을 소모하고 피드백을 해야 합니다.
업데이트:typeahead 복구가 상당히 복잡하기 때문에 되돌려 사용하기만 하면 됩니다
feedkeys()
.토론 #1
전반적으로 말하자면, 나는 네가 소개해야 할 물건을 좋아하지 않지만, 나는 너의 필요를 인정한다.나는 최초의 토론에 참여하지 않았다.내가 이해하지 못하는 것은
:nnoremap <silent> . :<C-U>call repeat#run(v:count)<CR>
대상:nnoremap <silent> . :<C-U>call repeat#run(v:count)<Bar>call feedkeys('`]', 'n')<CR>
이미 당신의 요구를 만족시켰습니다(공개 함수를 제외하고 Repeat.vim를 수정하지 않습니다)?!토론 #2
재미있는 것은 그것이 나에게 작용하지 않는다는 것이다.나는 정말 이 점을 생각해 본 적이 없다. 그것은 반드시 작용해야 할 것 같지만, 어떤 이유 때문에, 그것은 없다.내 테스트 하네스는 다음과 같은 간단한 텍스트 파일입니다.
"foo"
"bar"
나는 링을 사용한다.vim tods"
는 첫 번째 단어를 삭제한 다음.
두 번째 단어 주위의 따옴표를 삭제한다.내가 사용하는 매핑은 다음과 같습니다.runtime autoload/repeat.vim
nnoremap . :call repeat#run(v:count)<cr>`]
이러한 매핑을 통해 커서의 위치는 두 번째 단어 주위의 따옴표를 삭제한 후의 위치와 같습니다.그것을 너의 건의로 바꾸면 안 된다.실험을 위해
m
를 다음 항목에 매핑하려고 합니다.nmap m :call feedkeys('')<bar>ls<cr>
nmap m :call feedkeys('j')<bar>ls<cr>
nmap m :call feedkeys('j')<bar>throw "OK"<cr>
첫 번째는 버퍼 목록을 표시하고, 두 번째는 표시하지 않습니다. 그러나 세 번째는 오류를 던집니다.이것은 의미가 있습니다. feedkeys()
호출은 현재 맵이 완성된 후에 실행할 키를 추가하기 때문에 (이것은 완전히 하나의 맵이기 때문에) 두 번째 맵 ls
은 아래 j
로 제거되고, 세 번째 맵 j
은 이상으로 실행되지 않습니다.나는 중복이 어떻게 된 일인지 모르겠다.vim영사.내가 보기에
feedkeys(])
는 먼저 집행한 것 같지만, 나는 이것이 그다지 적합하지 않다고 생각한다.만약 발생한 일에 대해 더 잘 아는 사람이 있다면 저에게 알려 주세요.토론 #셋
원본인지 최신 복본인지 시험해 봤어요.윌?스크립트 로컬 함수를 처리하는 원본 :call <SNR>042_repeat
과surround와 유사한 플러그인을 사용했습니다.vim, 아주 완벽하게 일했어요.토론 #4
응, 네 말이 맞아. 그게 확실히 효과가 있어.이전에 나는 새로운 버전을 사용해 보았는데, 나는 단지 typeahead의 물건을 삭제했을 뿐이다.내가 뭘 놓친 것 같아.어떤 방식이든지 나는 그것으로 비추는 것을 실현할 수 있다.그럼에도 불구하고 나는 그다지 기쁘지 않다.그것의 작업 원리는 매우 매력적이지만, 나에게 있어서
feedkeys()
는 실현된 사실로 사용되고, 다른 물건으로 포장repeat
하고 싶은 누구에게도 중요하지 않다.나는 다른 사람들이 자신의 중복을 직접 비추도록 typeahead 저장과 복구를 사용하고 싶다.물론, 나는 현재 나 (나의 친구) 만 이런 용례를 가지고 있다는 것을 깨달았기 때문에, 나는 이것이 다른 사용자들에게 얼마나 중요한지 모른다.마지막으로 @tpope 전화입니다.만약 당김 요청이 거절된다면, 나는 당신의 해결 방법을 사용할 것입니다.그나저나 이 점은 사후에 보면 명백히 알 수 있다.
토론 #5
Vim은 간단하게 포장하여 비치는 것을 허용하지 않는다.너는 이미 중복에 의존하고 있다.vim 구현 세부 사항 (예를 들어 공개해야 하는 함수 이름, 그리고 이것은:map-expr
이 아니라는 사실).@tpope가 나중에 오래된 Vim 지원을 포기하고 :normal
로 전환하기로 결정하면 feedkeys()
추가는 계속 작동합니다.당신의 앞당겨 프린트 저장소는 매우 특별한 기교입니다. 나는 그것을 포함하고 싶지 않습니다. 특히 두 사람이 후퇴를 방지하는 방면의 기록이 아직 좋지 않기 때문입니다.
토론 #6
전투 테스트를 거친 낡은 실현으로 돌아가는 것이 의미가 있을 것이라고 생각합니다.토론 #7
합리적인 결정, 내 생각에는:).나는 제출의 기초를 다시 설정했고 복구feedkeys()
만 보류했지만 자동으로 불러오는 함수repeat#run
는 보류했다.고맙습니다.
Reference
이 문제에 관하여(feedkeys () 를 사용하지만 미리 복구해야 합니다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://github.com/tpope/vim-repeat/issues/11텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)