Копирование текущего буфера Vim в буфер обмена
Я пытаюсь скопировать буфер Vim в буфер обмена, и я сделал следующее:
:!cat %|pbcopy
# Работает отлично
Затем я попытался сопоставить это с ключом лидера (это моя первая попытка сопоставить что-либо, поэтому, пожалуйста, извините, если что-то глупо найдено).
:map <leader>c :!cat %|pbcopy
# Это не работает; vim жалуется: не команда редактора
2 ответа
Избежать трубы
:map <leader>c :!cat %\|pbcopy
Также рассмотрите возможность использования nnoremap для остановки рекурсивных отображений и завершения команды командой <CR>
поэтому команда запускается автоматически.
nnoremap <leader>c :!cat %\|pbcopy<CR>
Вы также можете рассмотреть возможность использования shellescape, только если в файле есть пробелы или другие необычные символы
nnoremap <leader>c :exec '!cat '.shellescape('%').'\|pbcopy'<CR>
Или, как говорит Питер Рикнер, просто используйте
nnoremap <leader>c :w !pbcopy<cr>
Это будет работать на любой системе, а не только на Mac:
:nmap <leader>c :%y+
(Я никогда не могу вспомнить разницу между "+
а также "*
регистрируется.) OTOH, ваш метод будет работать, если вы работаете на Mac, используя версию vim, которая не поддерживает GUI, такую как /usr/bin/vi
,
:help "+
:help :y