Vim имеет модификатор :help :map-<unique>
, который делает сбой сопоставления, если такое сопоставление уже существует.
au FileType ruby nnoremap <unique> <expr> <leader>t ...
Вы можете подавить сообщение об ошибке с помощью :silent!
:
au FileType ruby silent! nnoremap <unique> <expr> <leader>t ...
В качестве альтернативы (и это немного лучше, поскольку он не подавляет никаких других ошибок в определении отображения, таких как синтаксические ошибки), вы можете явно проверить существование отображения с помощью maparg()
:
au FileType ruby if empty(maparg('<leader>t', 'n')) | nnoremap <expr> <leader>t ... | endif
Обратите внимание, что это буквально реализует то, что (я понимаю) вы просите; первый файл Ruby будет определять отображение, а любые последующие файлы Ruby игнорируются; отображение всегда будет использовать имя первого файла и номер строки. Если вместо этого вы хотите иметь разные правые части для одного и того же отображения, в зависимости от редактируемого в данный момент файла, решение - это отображение локального буфера согласно ответу @ PeterRincker. Но с этим вы должны быть внутри исходного буфера Ruby, чтобы вызвать правильное отображение.
Средством для этого может быть отозвание выполненной командной строки из истории командной строки (должно происходить автоматически при неполном отображении, иначе через histadd()
), так что вы можете легко вызвать команду из другого файла.