I wrote a vim function to help me navigate the wiki when I'm editing it. It extends the 'gf' (goto file) functionality. Once installed, you place the cursor on a wiki page name and press 'gf' (without the quotes); if the file exists, it gets loaded. This function takes into account the ikiwiki linking rules when deciding which file to go to. let me know what you think To enable this functionality, paste the code below in your `.vim/ftplugin/ikiwiki.vim` file " returns the directory which can be considered the root of the wiki the " current buffer belongs to, or an empty string if we are not inside an " ikiwiki wiki " " NOTE: the root of the wiki is considered the first directory that contains a " .ikiwiki folder, except $HOME/.ikiwiki (the usual ikiwiki libdir) " " if you can think of a better heuristic to get ikiwiki's root, let me know! function! GetWikiRootDir() let check_str = '%:p:h' let pos_wiki_root = expand(check_str) while pos_wiki_root != '/' if isdirectory(pos_wiki_root . '/.ikiwiki') && pos_wiki_root != $HOME return pos_wiki_root endif let check_str = check_str . ':h' let pos_wiki_root = expand(check_str) endwhile if isdirectory('/.ikiwiki') return '/' endif return '' endfunction " This function searches for a .mdwn file (.mdwn) using the ikiwiki " WikiLink rules and returns its full path. " " The rules are the following " " if the filename starts with '/', use as base dir the root directory of the " wiki " " if not: " " try first .//.mdwn " then for ./.mdwn " then for /.mdwn " " return the first one that exists " " the base path (. above) is the directory that contains the current buffer " function! FileForWikiLink(name) let target_fname=a:name . ".mdwn" let wikiroot_dir = GetWikiRootDir() if match(target_fname, '^/') >= 0 return wikiroot_dir . target_fname endif let subdir_file = expand('%:p:r') . "/" . target_fname let currdir_file = expand('%:p:h') . "/" . target_fname let wikiroot_file = wikiroot_dir . "/" . target_fname if filewritable(subdir_file) return subdir_file endif if filewritable(currdir_file) return currdir_file endif if filewritable(wikiroot_file) return wikiroot_file endif return a:name endfunction setlocal includeexpr=FileForWikiLink(v:fname)