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는 보류했다.고맙습니다.

좋은 웹페이지 즐겨찾기