如何为文本文件创建语法文件?

时间:2013-02-19 16:25:24

标签: vim text formatting

我希望我可以在标准文本文件中格式化文本片段 我想选择一个短语或一个单词,调用一个简单的命令,并使用这些格式进行格式化:

  • 粗体
  • 斜体
  • 下划线
  • 红色字体颜色
  • 黄色背景色

这可能吗? (类似于vim文件中的语法高亮,但在我的情况下使用选定的文本)

我知道vim中有一个Txtfmt插件,我在过去几年尝试了2次,但每次都卸载了它。
这就是原因:

  1. 无法直观地选择文本并对其进行格式化,您必须在命令行中插入开始代码来编写文本并在命令行中插入结束代码。
  2. 您无法复制文本,因为Txtfmt插件会在文本中插入隐藏的格式代码
  3. 在命令行中插入开始代码和结束代码(在调用常规命令之后)并且代码太复杂太复杂了

2 个答案:

答案 0 :(得分:1)

您的文本中需要插入一种标记。 Vim在纯文本上运行,没有单独的元数据层,如文字处理器。通过语法高亮和新的隐藏功能,您可以部分地使Vim看起来像WYSIWYG,但实际上您仍在使用原始文本。

如果你对这个限制很好,并且想要坚持使用Vim进行编辑任务,我建议使用现有的标记解决方案,而不是从头开始创建一个新的解决方案。到目前为止,有几种语法可供选择, Markdown 可能是最受欢迎的。 (它也在Stack Overflow中使用!)使用现有语法,您可以利用所有现有的插件/映射/命令,甚至一些外部工具(例如,用于转换为HTML)。

答案 1 :(得分:1)

这可能是我认为你想要的最简单的可能实现。它允许使用您描述的颜色/样式在当前缓冲区中突出显示自定义字符串。您选择突出显示的自定义字符串无法在Vim会话之间保存。

首先,为您的定制突出显示定义突出显示组SpecialTxt

au ColorScheme * hi SpecialTxt guibg=yellow guifg=red gui=bold,underline,italic

(请注意,这必须通过autocmd完成,以便加载新的colourscheme不会覆盖它。)

现在,您可以选择任何正则表达式来继承此颜色:

call matchadd( 'SpecialTxt', [YOUR_REGEX], 1 )

或者您可以编写一个简单的命令来设置匹配:

command! -nargs=1 Special :call matchadd('SpecialTxt',"<args>",1)

或创建地图,以便双击单词将其设置为此着色:

nnoremap <silent> <2-LeftMouse> :call matchadd('SpecialTxt',expand('<cword>'),1)<CR>

希望有所帮助。如果它不是你想要的,那就道歉。