Вы можете попробовать либо
nnoremap <silent> t :<C-u>silent !../tt <C-r>=shellescape(expand('<cword>'), 1)<CR><CR><C-l>
или
nnoremap <silent> t :<C-u>call system('../tt '.shellescape(expand('<cword>')))<CR>
или даже
nnoremap <expr> <silent> t system('../tt '.shellescape(expand('<cword>')))[-1]
. Обратите внимание на некоторые вещи:
- Не используйте
map
(без n
и nore
), если у вас нет конкретной причины. Я полагаю, что вам не нужно это отображение для визуального режима и режима ожидания оператора (ведущий n
ограничивает отображение только в обычном режиме), и вы также не должны хотеть, чтобы это отображение было переназначаемым.
- Используйте
<C-u>
, чтобы сбросить счетчик, который вы можете время от времени вводить, если только вы не уверены, что он вам нужен (в третьей версии используются два хака, которые превращают отображение в no-op с побочным эффектом и не нуждаются в <C-u>
).
- Никогда не забывайте избегать аргументов оболочки.
- Версия с
silent !
(не забывайте пробел после silent
, поэтому ответ @David Pope не работает) имеет <C-l>
в конце. Это связано с тем, что использование !
будет всегда предоставлять доступ к вашему терминалу и, следовательно, после выполнения команды потребуется перерисовка.
- Версии с
system()
не будут работать, если вы добавите аргумент, содержащий перевод строки, это задокументированная ошибка. Если вы не хотите этого делать (expand('<cword>')
никогда не добавит перевод строки), это абсолютно безопасно.
t
- очень полезное движение. Лучше научиться использовать его, а затем переназначить. Я предлагаю ,t
как lhs.