Измените поведение отображения в некоторых случаях и повторно используйте функциональность во всех других - PullRequest
1 голос
/ 25 декабря 2011

Я пытаюсь изменить поведение «K» в определенных обстоятельствах, но сохраняю его исходную функциональность во всех остальных.Вот моя неудачная попытка

function! GetDocumentation()
    if &filetype == 'java'
        JavaDocSearch
    else
        normal K
    endif
endfunction

nnoremap K :call GetDocumentation()<CR>

Однако, поскольку я использую K в функции, когда она вызывается в результате переназначения, используется новое отображение K, и я получаю бесконечную рекурсию.Думаю, я мог бы как-то уловить суть функции в строке nnoremap, но это кажется неловким, и было бы неплохо принудительно использовать оригинальное отображение ключа.

Надеюсь, это имеет смысл,

Спасибо.

Ответы [ 2 ]

3 голосов
/ 25 декабря 2011

Команда :normal без модификатора ! - как она используется в функции - выполняет свои аргументы как команды нормального режима с учетом сопоставлений .Вот почему строка

        normal K

запускает отображение, которое переопределило обработчик по умолчанию.Таким образом, чтобы игнорировать отображения команд теневого копирования, измените строку следующим образом:

        normal! K
2 голосов
/ 25 декабря 2011

@ И.Б..правильно: вы должны использовать :normal! здесь.Но функция - это перебор: достаточно отображения следующего выражения:

nnoremap <expr> K ((&filetype is# "java")?(":JavaDocSearch\n"):("K"))

Это отображение не сработает само по себе из-за nore и также на восемь строк короче.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...