Я не хочу вдаваться в подробности редактирования страниц в vimwiki - для этого имеется неплохая документация, да и сам я пока не набрал достаточного опыта. Хочу лишь отметить, что возможности и уровень юзабилити vimwiki весьма высоки: работать с ним действительно приятно и удобно. Дочерние страницы создаются простым нажатием на клавишу Enter, синтаксическая подсветка радует глаз, удобная навигация по иерархии страниц, возможность экспорта в HTML, независимая подсветка фрагментов кода в соответствии с языком, ссылки на ресурсы (в том числе на локальные файлы), которые открываются во внешней программе в соответствии с их типом. Правда, в последнем случае обнаружилась и ложка дегтя: для открытия файлов во внешней программе vimwiki использует команду silent !xdg-open, которая портит терминал (возможно, только у меня), и для того, чтобы вернуть его в нормальное состояние, нужно ввести Ctrl-L. Но это проблема не vimwiki, a vim, да и открывать картинки из vim я не собираюсь.
Ниже я привожу настройки, которые я добавил в файл .vimrc для vimwiki.
" ---- Vimwiki settings " ---- let g:WikiGlobal = {} let g:WikiGlobal.nested_syntaxes = {'c': 'c', 'c++': 'cpp', 'perl': 'perl', \ 'python': 'python', 'sh': 'sh'} let g:vimwiki_list = [g:WikiGlobal] " disable concealing of short links let g:vimwiki_url_maxsave = 42 " redefine original <C-Up> and <C-Down> mappings in vimwiki buffers nmap <silent> <Leader>wn <Plug>VimwikiDiaryNextDay nmap <silent> <Leader>wp <Plug>VimwikiDiaryPrevDay " add schemes 'vlocal:' and 'vfile:' to open files in a new tab fun! VimwikiLinkHandler(link) let link = a:link if link =~ "vlocal:" || link =~ "vfile:" let link = link[1:] else return 0 endif let [idx, scheme, path, subdir, lnk, ext, url] = \ vimwiki#base#resolve_scheme(link, 0) if g:vimwiki_debug echom 'LinkHandler: idx='.idx.', scheme=[v]'.scheme.', path='.path. \ ', subdir='.subdir.', lnk='.lnk.', ext='.ext.', url='.url endif if url == '' echom 'Vimwiki Error: Unable to resolve link!' return 0 else call vimwiki#base#edit_file('tabnew', url, [], 0) return 1 endif endfunПеременная g:WikiGlobal нужна в данном случае только для определения независимой подсветки фрагментов кода внутри страниц (кстати, обратим внимание на некорректную подсветку синтаксиса в районе 'c++': 'cpp'). Например, фрагмент
{{{c++ int main( void ) { return 0; } }}}корректно подсвечен как исходник на C++.
Также я увеличил значение переменной g:vimwiki_url_maxsave до 42, чтобы ссылки на ресурсы не срезались до очень коротких, переопределил маппинги для VimwikiDiaryNextDay и VimwikiDiaryPrevDay, которые изначально соответствовали <C-Down> и <C-Up> (а эти комбинации клавиш я использую для навигации между окнами), и добавил функцию-обработчик нажатия на ссылки VimwikiLinkHandler(), в которой определена обработка новых типов ресурсов vlocal и vfile. Дело в том, что по умолчанию vimwiki открывает ссылки на файлы (они соответствуют типам ресурсов local и file) во внешней программе (как я уже говорил, с помощью xdg-open). Ну а обработчик VimwikiLinkHandler() будет открывать ресурсы новых типов vlocal и vfile в отдельной вкладке. Исходный код данного обработчика приведен в документации vimwiki, что подтверждает ее высокий уровень.
Все это здорово, но хотелось бы запускать vimwiki сразу из командной строки. Сделать это просто. Поместим в .bashrc простую функцию:
function vimwiki { if (( $# == 0 )) ; then vim -c VimwikiIndex return fi if [ $1 = "-l" ] ; then local columns=`stty size | cut -d' ' -f2` for i in $HOME/vimwiki/*.wiki ; do echo `basename $i` | sed 's/\.wiki$//' done | COLUMNS=$columns column return fi vim -c VimwikiIndex -c "VimwikiGoto $1" }Теперь в нашей оболочке появилась новая команда vimwiki. Если запустить ее без параметров, то откроется индексная страница vimwiki. Кроме того, эта команда позволяет вывести список всех страниц vimwiki, если ей передан аргумент -l (в предположении, что рабочей директорией vimwiki является $HOME/vimwiki), а также открыть vim на определенной странице, когда имя страницы передано ей в первом аргументе.
Комментариев нет:
Отправить комментарий