Vim - команда оболочки карты - PullRequest
       0

Vim - команда оболочки карты

2 голосов
/ 20 февраля 2012

У меня есть следующая инструкция в моем .vimrc:

map t :!../tt <C-R><C-W> <CR><CR>

Это работает довольно хорошо: vim получает слово из файла и запускает ../t word.Но одна досадная вещь - когда команда запускается, vim на некоторое время возвращается в shell, а затем возвращается в файл.Мне не нужно видеть вывод команды, так можно ли обойти эту раздражающую вспышку?

Ответы [ 2 ]

2 голосов
/ 21 февраля 2012

Вы можете попробовать либо

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]

. Обратите внимание на некоторые вещи:

  1. Не используйте map (без n и nore), если у вас нет конкретной причины. Я полагаю, что вам не нужно это отображение для визуального режима и режима ожидания оператора (ведущий n ограничивает отображение только в обычном режиме), и вы также не должны хотеть, чтобы это отображение было переназначаемым.
  2. Используйте <C-u>, чтобы сбросить счетчик, который вы можете время от времени вводить, если только вы не уверены, что он вам нужен (в третьей версии используются два хака, которые превращают отображение в no-op с побочным эффектом и не нуждаются в <C-u>).
  3. Никогда не забывайте избегать аргументов оболочки.
  4. Версия с silent ! (не забывайте пробел после silent, поэтому ответ @David Pope не работает) имеет <C-l> в конце. Это связано с тем, что использование ! будет всегда предоставлять доступ к вашему терминалу и, следовательно, после выполнения команды потребуется перерисовка.
  5. Версии с system() не будут работать, если вы добавите аргумент, содержащий перевод строки, это задокументированная ошибка. Если вы не хотите этого делать (expand('<cword>') никогда не добавит перевод строки), это абсолютно безопасно.
  6. t - очень полезное движение. Лучше научиться использовать его, а затем переназначить. Я предлагаю ,t как lhs.
0 голосов
/ 20 февраля 2012

Я считаю, что это должно работать.

map <silent> t :silent!../tt <C-R><C-W> <CR><CR>

Но у меня нет вашего tt-приложения, поэтому я не могу проверить, есть ли stderr, stdout и т. Д .; Я понятия не имею, имеют ли это значение в vim.

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