有没有适用于预览Markdown文件的Vim插件?

76

我喜欢Marked和Mou编辑器,因为它们具有实时预览渲染结果的强大功能。所以我想知道,在Vim中是否有一种方法可以做到同样的事情?


这不是你要求的内容,但如果你还不知道它,可以查看Voom,它是一个与Markdown(:voom markdown)一起使用的大纲工具。它比即时渲染器更有用,因为它可以让你轻松浏览文档标题。 - naught101
1
所有的 Vim 插件似乎都需要一些外部程序,如 Python、Ruby、Javascript 或 Rust。我更喜欢 euclio/vim-markdown-composer,它的后端是用 Rust 编写的,并允许使用 pandoc 以及生成器。大部分情况下它都能正常工作(需要安装 Rust 并进行进一步编译,但在这样做并重新启动后就可以完美地运行)。而且它非常快速,这对我来说是最重要的事情。 - icc97
10个回答

73

1
我刚刚偶然发现了你的插件,非常喜欢这个概念。但是遇到了一些问题 - 你能否看一下 https://dev59.com/62DVa4cB1Zd3GeqPeIf3 并告诉我,它是否也可以在Windows上运行? - Rook
2
非常酷,但不幸的是编辑器变得非常卡顿,键盘按键被跳过了。 - Ciryon
3
非常复杂的设置,在我的OSX上没有生效。 - user160917
我喜欢它自动打开文件,即使没有保存也会自动刷新,并且在我关闭文件时自动关闭预览! - aharris88
请在此能够与 neovim 兼容时告知我们! - Tom Hale
@Suan,谢谢。我正在考虑尝试一下。当我尝试使用之前提到的Google Chrome扩展程序在浏览器中预览.md文件时,我必须刷新它。我的文档通常很长,无法放在一页上。在我刷新浏览器后,它通常会将我带到md文件的顶部,而我正在远离.md文件的顶部进行编辑。你的插件是否以某种方式知道最后一次编辑发生的位置,并在.md页面中预览该位置? - alpha_989

44
我最近发现了一个Chrome扩展程序,可以使Chrome能够正确打开和显示markdown文件:Markdown预览(该链接已不再可用,现在可以使用Markdown预览加强版)。
然后,只需要在Vim中映射一个按键,就可以用Chrome打开文件。我的设置如下:
" Open markdown files with Chrome.
autocmd BufEnter *.md exe 'noremap <F5> :!start C:\Users\tomas\AppData\Local\Google\Chrome\Application\chrome.exe %:p<CR>'

这个命令需要根据实际情况进行编辑,如果你的文件没有“.md”扩展名,你想要在不同的按键上进行映射,或者Chrome位于不同的位置。
现在,每当我编辑一个“.md”文件时,我可以按下键在Chrome中打开该文件。一个完美的解决方案是让Chrome每隔几秒自动重新加载,但我似乎找不到一个适用于本地文件的扩展程序。

优点:

  • 能够通过点击按钮预览您的Markdown文件,无需运行服务器或特殊代码。
  • 适用于支持Vim和Chrome的所有平台,几乎覆盖了所有平台。

缺点:

  • 没有自动刷新,每次想要预览文件都需要按下键。
  • 没有Github风格的Markdown支持。

1
你可以在Chrome中使用LiveReload扩展程序来缓解“无自动刷新”的问题,但是缺少GitHub的风格对我来说是一个障碍。 - twomm
请点击以下链接查看有关编程的内容:https://chrome.google.com/webstore/detail/livereload/jnihajbhpnppcggbcgedagnkighmdlei,并在其网站上查看有关本地文件的安装说明。我自己没有尝试过,但应该可以正常工作。 - twomm
12
请使用 Markdown Preview Plus 替代。 - user160917
6
提示:不要忘记允许chrome扩展程序清单中的markdown插件读取文件。 - Bentley4
3
以下是针对 Mac 的相同命令:autocmd BufEnter *.md exe 'noremap <F5> :! /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome %:p<CR>'。该命令可让用户在打开 Markdown 文件时按下 F5 键,自动在 Google Chrome 中打开当前文件的预览页面。 - owise1
显示剩余7条评论

17

你实际上可以使用Pandoc编译成所需的文档格式,并使用外部默认命令查看它。例如,我喜欢将其预览为PDF,并在Ubuntu上使用以下设置。

" pandoc , markdown
command! -nargs=* RunSilent
      \ | execute ':silent !'.'<args>'
      \ | execute ':redraw!'
nmap <Leader>pc :RunSilent pandoc -o /tmp/vim-pandoc-out.pdf %<CR>
nmap <Leader>pp :RunSilent gnome-open /tmp/vim-pandoc-out.pdf<CR>

我使用,pc编译文档,并使用,pp预览。由于在Ubuntu中evince是默认的查看器,会自动加载更改后的文件。因此,只需运行,pc以使更改生效。

PS:我的Leader键映射到了,


我尝试使用这个快捷方式编译时遇到了“E481: 不允许使用范围”的错误。 - Luís de Sousa

13

我使用 Marked.app 预览 Markdown 文件,并将 <leader>p 映射为预览功能:

function! s:setupMarkup()
  nnoremap <leader>p :silent !open -a Marked.app '%:p'<cr>
endfunction

au BufRead,BufNewFile *.{md,markdown,mdown,mkd,mkdn} call s:setupMarkup()
如果您不想在Marked.app上花费4美元,那么可以尝试Hammer.vim。将该行更改为:

如果你不想花费4美元购买Marked.app,那么你可以尝试Hammer.vim。将这一行更改为:

map <buffer> <leader>p :Hammer<CR>

5

补充@Codemonkey的回答,如果你使用的是OSX操作系统,可以在.vimrc文件中添加以下内容。

" Open markdown files with Chrome.
autocmd BufEnter *.md exe 'noremap <F5> :!open -a "Google Chrome.app" %:p<CR>'

4

不,有几个Vim插件可以进行语法高亮、代码片段等等,但是Vim只会显示文本,因此你无法在Vim中预览Markdown(或任何其他类型的预览)。

如果你对实时预览感兴趣,也许MarkdownPad更适合你的需求。


3
并不正确,正如 @Suan 已经提到的那样,有一个叫做 vim-instant-markdown 的工具可以为 vim 提供实时的 Markdown 预览。安装可能有些麻烦,但它确实能够使用! - chutsu
4
不正确:vim-instant-markdown插件的预览不在vim内,而是在浏览器中。 - Hotschke
2
我认为预览不一定必须在vim中显示,只需要能够从vim中进行控制和更新即可。 - Thriveth

3
这是一个简单的vim插件,可以在Chrome中查看Markdown——它不需要ruby或任何花哨的东西,并且当您写入vim缓冲区时会刷新预览(也可以使用热键激活)。此外,预览在后台进行,因此您永远不必离开vim。

https://github.com/JamshedVesuna/vim-markdown-preview


我的文档通常很长,无法放在一页上。当我刷新浏览器时,它通常会将我带到md文件的顶部,而我正在远离.md文件的顶部进行编辑。这个插件是否知道最后一次编辑发生在哪里,并在.md页面中预览该位置? - alpha_989
2
尝试一下这个:https://github.com/iamcco/markdown-preview.vim - Pegasus

1

我在我的 .vim 目录中有一个函数:

function! markdown#preview()
  silent update
  let output_name = tempname() . '.html'

  let file_header = ['<html>', '<head>',
        \ '<meta http-equiv="Content-Type" content="text/html; charset=utf-8">',
        \ '<title>'.expand('%:p').'</title>',
        \ '<link rel="stylesheet" type="text/css" href="http://yui.yahooapis.com/3.3.0/build/cssreset/reset-min.css">',
        \ '<link rel="stylesheet" type="text/css" href="http://yui.yahooapis.com/3.3.0/build/cssbase/base-min.css">',
        \ '<link rel="stylesheet" type="text/css" href="http://yui.yahooapis.com/3.3.0/build/cssfonts/fonts-min.css">',
        \ '<style>body{padding:20px;}div#container{background-color:#F2F2F2;padding:0 20px;margin:0px;border:solid #D0D0D0 1px;}</style>',
        \ '</head>', '<body>', '<div id="container">']

  call writefile(file_header, output_name)

  silent exec '!markdown "' . expand('%:p') . '" >> "' . output_name . '"'

  silent exec '!echo "</div></body></html>" >> "' . output_name . '"'

  silent exec '!sensible-browser "' . output_name . '" &'
endfunction

我也有以下的映射:

inoremap <buffer> <F7> <ESC>:call markdown#preview()<CR>
nmap <buffer> <F7> :call markdown#preview()<CR>

虽然不完美也非实时,但对我有限的需求来说已经足够了。


使用它和浏览器中的自动重载插件,两个窗口并排显示... - Zsolt Botykai
@lucapette - 那个函数基本上是Nate Silva的插件简化版,不是吗?http://blog.natesilva.com/ - Rook
@Idigas,老实说,我不记得我从哪里得到这个函数了。虽然,这是我第一次查看那个网站。 - lucapette
@lucapette - 抱歉,我并不是在指责你,只是注意到了相似之处(雅虎的CSS引起了我的注意)。我有一个快速问题,你知道有没有一款Markdown插件可以使用自己的CSS? - Rook
@Idigas 不不,没问题。我只是不记得我从哪里得到它了。顺便说一下,我还没有仔细搜索过,所以我不知道。也许有插件的空间... - lucapette

1

我的文档通常很长,无法适应单个页面。在我刷新浏览器后,它通常会将我带到md文件的顶部,而我正在远离.md文件的顶部进行编辑。这个插件是否能够知道最后一次编辑发生的位置,并在.md页面中预览该位置? - alpha_989
这不是我的插件,我建议与项目维护者沟通。 - katzmopolitan

0

我认为在vim中预览markdown不是一个好主意。 但是你可以通过输入%!markdown将你的markdown转换为HTML,假设你已经安装了markdown。然后保存该文件并在浏览器中打开它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接