Я написал команду карты в vim, которая граничит с тем, что она слишком сложна для моего вкуса. Я бы хотел:аннотация и повторное использование частей команды карты в vimrc
- Отрежьте части или, по крайней мере, выплюньте их на несколько строк и объясните каждый.
- Повторное использование большинства из них только с 2 вещами, каждый раз изменяя только 2 вещи.
Команда использует плагин vim-pandoc для создания Html-файла из текущего файла pandoc и копирования его в буфер обмена.
nnoremap <leader><leader>11 :w<cr>:Pandoc html<cr>:sleep 100m<cr>:e <c-r>=expand('%:r')<cr>.html<cr>ggVG"+y:b#<cr>:bd #<cr>
Моя первая попытка таким образом:
nnoremap <expr> <leader><leader>22 MyFunc()
func! MyFunc()
let save = ':w<cr>'
let runPandoc = ':Pandoc html<cr>'
let sleep = ':sleep 100m<cr>'
let viewResult = ':e ' . expand('%:r') . '.html' . '<cr>'
let copyAll = 'ggVG"+y'
let backToPrevBuf = ':b#<cr>'
return save . runPandoc . sleep . viewResult . copyAll . backToPrevBuf
endfunc
Однако, это не работает, потому что он имеет <cr>
в возвращаемом значении вместо фактического выполнения ввода.
Используя это, я могу передать аргумент MyFunc, который изменит части html
на другие типы файлов.
Мои два вопроса:
- Есть лучше, более прямой путь абстрагируясь от части длинных карт?
- Как я могу решить проблему с результатом
<cr>
, вместо фактического значения «Нажмите кнопку ввода».
Спасибо за помощь!
EDIT:
После получения предложения Теперь у меня есть текущая версия, это кажется немного многословным. В то время как я могу обернуть кнопки feeds, чтобы быть более коротким именем с параметром «n», есть ли что-нибудь еще, что я могу сделать?
func! MyFunc()
call feedkeys(":w\<cr>",'n')
call feedkeys(":Pandoc html\<cr>",'n')
call feedkeys(":sleep 100m\<cr>",'n')
call feedkeys(':e ' . expand('%:r') . '.html' . "\<cr>",'n')
"TODO read about :%y+ understand why it copies the entire file
call feedkeys('ggVG"+y','n')
call feedkeys(":b#\<cr>",'n')
endfunc
EDIT:
Наконец, я понял, что это значит избавиться от feedkeys, и теперь я достиг конечного пункта назначения:
nnoremap <silent> <leader><leader>22 :call MyFunc()<cr><cr>
func! MyFunc()
w
Pandoc html
sleep 100m
execute 'e' (expand('%:r') . '.html')
%y+
b#
endfunc
Спасибо за помощь!
: ч feedkeys() может сделать трюк для вас. –
Последний трюк, IIRC ': e%: r.html' или даже': e% <. Html' должен работать. –
Вы также можете избежать открытия и закрытия буфера с помощью следующего: 'let @ + = join (readfile (expand ('%: r).'. Html ')," \ n ")'. Иногда это интересно избегать запуска автокоманд, поскольку они могут иметь побочные эффекты, замедлить выполнение и т. Д. –