Giter VIP home page Giter VIP logo

pangu.vim's Introduction

pángǔ.vim

盘古插件用于自动格式化、规范化中文排版。

它会将一些不规范,或不推荐的排版方式,在保存文件时进行自动格式化、规范化。

功能

  • 中英文字符间增加一个半角空白。
  • 特殊的,日期可以指定不添加空白。
  • 中文前后的半角标点转成全角标点。
  • 全角英文、数字转成半角字符。
  • 连续的句号自动转省略号。
  • 感叹号、问号最多允许连续重复 3 次。
  • 其他中文标点符号不允许重复出现。
  • 剔除不可见空白。
- 中文和English之间要有空白.
+ 中文和 English 之间要有空白。

  let g:pangu_rule_date = 0
- 今天是 2022 年 1 月 21 日星期五。
+ 今天是2022年1月21日星期五。

  let g:pangu_rule_date = 1
- 今天是2022年1月21日星期五。
+ 今天是 2022年1月21日 星期五。

- <世界观: 现代人必须要懂的科学哲学和科学史>这本书重建了我的科学观和世界观.
+ 《世界观:现代人必须要懂的科学哲学和科学史》这本书重建了我的科学观和世界观。

- 0123456789
+ 0123456789

- ABCDEFG...XYZ
+ ABCDEFG...XYZ
- abcdefg...xyz
+ abcdefg...xyz

- 真是太无语了。。。
+ 真是太无语了······

- 苍天哪!!!!!这是怎么了??????
+ 苍天哪!!!这是怎么了???

- 不小心多打了标点,,,和符号。。
+ 不小心多打了标点,和符号。

支持的文件格式

推荐在以下文件格式中使用:

  • Markdown (*.md, *.markdown)
  • Text (*.text, *.txt)
  • Wiki (*.wiki)
  • Vim 中文文档 (*.cnx)

如果想在其他格式的文件中使用这个功能,可以执行 :[range]Pangu 命令。

同时可以在 vimrc 中开启保存文件时自动规范化功能。开启方式:

autocmd BufWritePre *.markdown,*.md,*.text,*.txt,*.wiki,*.cnx call PanGuSpacing('ALL')

注意:目前只对纯文本格式的文件支持较好。其他源代码场景,请谨慎开启。

如果有合适的文件格式推荐,请提交 Issue

安装

via vim-plug:

Plug 'hotoo/pangu.vim', { 'for': ['markdown', 'vimwiki', 'text'] }
let g:pangu_rule_date = 1

via Vundle:

Plugin "hotoo/pangu.vim"

用法

:[range]Pangu 命令

手动执行该命令,将当前缓冲区内容进行规范化。

注意:从 1.0 开始,:Pangu 命令开始支持 range 模式,不兼容地,0.x 默认 规范化所有内容,1.0 由于 range 特殊性,默认规范化选中行或当前行部分。

希望规范化所有内容时,可以使用 :PanguAll 命令。

:PanguAll

规范化当前缓冲区内所有内容。

:PanguDisable 命令

禁止自动规范化。

:PanguEnable 命令

启用自动规范化。

技巧

批量规范化多个文档。

$ vim a.md b.md c.md

:argdo PanguAll | update
:wq

持久化禁用

在编辑的文档中任何位置注明 PANGU_DISABLE,则整个文档不自动规范化。

参考

pangu.vim's People

Contributors

bennyyip avatar gooooloo avatar hotoo avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

pangu.vim's Issues

格式化文本的时候卡顿明显

使用盘古插件进行格式化的时候有明显卡顿,遇到稍微大点的问题(其实也没多大,几百行上千行的那种)跑格式化的时候会卡住很长时间,如果在格式化期间进行别的操作则会强制退出,不知道是不是受到别的插件或者 vim 版本的影响?(下附)

不知道格式化是否能使用最新的异步接口?如果可以的话应该使用起来的感受会好一些。(之前使用 sytastic 很卡,切换到 ale 之后卡顿就消失了)

作者大大如果需要别的额外信息请联系我,我尽量提供完整的信息。最近在学习 vimscript,也可以帮忙写一些小功能...

macOS 版本:10.13.4
neovim 版本:v0.2.2
iTerm2 版本:3.1.6

Error occur when exectuing `:argdo Pangu | update`

"404.md" [最后一行不完整] 6 行,81 characters
E488: 多余的尾部字符: Pangu | update
"_drafts/CheetahDB-轻型数据库.md" [最后一行不完整] 15 行,487 characters
E488: 多余的尾部字符: Pangu | update

支持 Range 操作

有的时候不想要格式化整个文档,只需要格式化其中的某一部分。

对于双重中括号 [[]] 的支持不好

举个例子,format 前

[[C]]
[[]]
[[C从]]

format 后

[[C]]
[[]]
[[C 从』]

后半个中括号被改了...

[[]] 是被各种基于markdown的笔记工具用来做双链的。

英文开头,中文结尾的 markdown 链接有 BUG

-* [Facebook发布用户界面库React,业界褒贬不一](http://www.infoq.com/cn/news/2013/06/facebook-react)
+* [Facebook 发布用户界面库 React,业界褒贬不一』(http://www.infoq.com/cn/news/2013/06/facebook-react)

Markdown Links 首个字符是中括号〖

当令变量 let g:pangu_punctuation_brackets = ["〖", "〗"] 时,

例子输入:

[〖内容〗内容](https://www.example.com/)

期望输出:不变

实际输出:

〖内容〗内容〗(https://www.example.com/)

谢谢

建议取消对反斜杠\及括号[]的转化处理

总之,Markdown 的语法全由一些符号所组成,这些符号经过精挑细选,其作用一目了然。比如:在文字两旁加上星号,看起来就 \*强调\*。Markdown 的列表看起来,嗯,就是列表。Markdown 的区块引用看起来就真的像是引用一段文字,就像你曾在电子邮件中见过的那样。

上述的\*强调\*会被不正确的转义为、*强调、*

同一行中文中出现多个英文句点,只能替换最后面的一个吗?

示例:说完第一句,这是第一个句号.再说第二句,这是第二个句号.这是第三个句号.
执行命令 :Pangu
预期:说完第一句,这是第一个句号。再说第二句,这是第二个句号。这是第三个句号。
结果:说完第一句,这是第一个句号.再说第二句,这是第二个句号.这是第三个句号。

这是规范如此还是 Pangu 插件替换出错了呢?

Wiki 内部链接会被格式化成文本导致链接失效

示例:

这是一个[[中文条目]]

会被格式化成

这是一个 [『中文条目』]

哪些扩展名的文件接受被格式化是可以自己配置的,但按 README.md 中指引如果配置了 wiki 使用这个插件的话,不细心的朋友可能会被毁掉一波儿 wiki 内部链接。希望对这个场景不要处理。

如果.vimrc设置了set gdefault选项,会在:Pangu的时候默认只排版遇到的第一个

如果.vimrc 设置了 set gdefault 选项,会在:Pangu 的时候默认只排版遇到的第一个。

Pangu 的实现中多次使用 s 命令来进行替换,并且使用了 g flag.
倘若用户的.vimrc 文件中设置了 set gdefault 选项,反而会取消掉 g flag 的效果。

譬如对于这样两条命令:
" 汉字与其前后的英文字符、英文标点、数字间增加空白。
silent! %s/(『一 - 龥぀ - ヿ』)([a-zA-Z0-9@&=[$%^-+(/])/� �/g " 汉字在前。
silent! %s/([a-zA-Z0-9!&;=],.:?$%^-+)/])(『一 - 龥぀ - ヿ』)/� �/g " 汉字在后。
我需要手动多次重复使用:Pangu 命令才能达到排版的效果。

当然,我还有一种选择是在使用 pangu 之前,将 gdefault 关掉...

无法修复 markdown 链接所使用的标点

例子输入:

【例子】(./example.md)

期望输出:

[例子](./example.md)

实际输出:

〖例子〗(./example.md)

怀疑和 commit 277bb43 “fix: chinese bracket (【】) in markdown links” 有关。


BTW commit 277bb43[【内容】内容](https://www.example.com/) 替换成了 [〖内容〗内容](https://www.example.com/),修改了原括号样式,不知是否有更好的解决方法?

当代码和markdown链接放在同一行时,出现bug处置

Pangu在处理下述文字时,总是错误的将第一个\变更为[

 还有非常多的自动补全,`\begin{}…\end{} \section{}…`,测试 当然,你还可以编写自己的 snippets。用了这个插件,写东西的时候有一种畅快淋漓的感觉,再也不用纠结乱起八糟的命令了。可以看一下作者录制的四个 [screencasts](https://github.com/SirVer/ultisnips),了解 UltiSpips 更强大的功能。

但是,当我删除后边的markdown链接时,上述错误就不会出现了,怀疑对markdown链接的处理是否有考虑不周的地方。

反引号前后没有留白

例如这段文字:

你好`world`再一次

期望输出

你好 `world` 再一次

然而并没有变化。

源代码我看了确实没有对`这个符号处理,但源代码中注释里的`前后都留白了,例如101行

不知道这个行为是feature还是bug?

谢谢

在简体中文中,在一些情况下允许叠用叹号不超过三次

在 2011 年 12 月 31 日发布的《标点符号用法》中有以下规定:“4.3.3.3 表示声音巨大或声音不断加大时,可叠用叹号;表达强烈语气时,也可叠用叹号,最多叠用三个叹号。在没有异常强烈的情感表达需要时不宜叠用叹号。”

某些情况下格式化括号时有一侧没有正确格式化

如下情况

测(测 test) , 测

期望执行之后,两侧都被格式化为中文括号,实际只有左侧被正确格式化

测(测 test) , 测

只有在如下情况时,两侧才能正确格式化为中文括号

测(测 test 测)测 , 测

Bug: 中文开头,中文结尾的 Markdown 链接识别错误

@hotoo ,您好!

接续 #2 ,我发现中文开头,中文结尾的 Markdown 链接同样会识别错误。 😓

这份文件为例:

4. ~~集成了 [FlashPlayer_Linux_x64][1] 与[支付宝官方的 Linux x64 插件][2](可删除);~~

会被替换为

4. ~~集成了 [FlashPlayer_Linux_x64][1] 与『支付宝官方的 Linux x64 插件』[2](可删除);~~

同样地,

* [下载地址][3]

会被替换为

* 『下载地址』[3]

这完全破坏了 Markdown 的链接。

期待您的回复,并希望能得到修复。

此致!

提供 options 設定排版規則

印象中「盤古之白」最有名的功能是「偏執地在中英文之間加上空白」,而 pangu.vim 好像志在更完整的中文排版規範,提供了不少額外規則;先不論哪些規則是 pangu.vim 該做的,是否可以有 options 能自訂排版行為?除了能滿足不同情境的使用者,也能減少釋出新版時,行為變更帶來的衝擊。

我擬了一些 option 名稱,會再試著發 pr 上來~
https://github.com/bootleq/pangu.vim/blob/options/doc/pangu.txt#L15

考虑基于语法的精确规范化工具

我在想怎么做一个基于语法的规范化工具,针对不同的文件格式,先分析 AST,然后针对需要替换的部分进行规范化。但是目前很多 AST 工具会破坏原始文件的一些细节,比如空白、空行等,最终输出替换后的结果可能会激怒用户。而且整个文档替换也有一些副作用。

没想清楚。

Markdown Links 中英文混排链接被插入空格导致链接失效

您好,当前的混排处理规则没考虑到链接中的情况,会导致链接失效。

  " 汉字与其前后的英文字符、英文标点、数字间增加空白。
  if g:pangu_rule_spacing == 1
    silent! execute firstline . ',' . lastline . 's/\([\u4e00-\u9fa5\u3040-\u30FF]\)\([a-zA-Z0-9]\)/\1 \2/g'
    silent! execute firstline . ',' . lastline . 's/\([a-zA-Z0-9]\)\([\u4e00-\u9fa5\u3040-\u30FF]\)/\1 \2/g'
  endif

[]()![]() 两种情况中小括号内的内容需要做例外处理,不太懂这个规则,看上去略微有点复杂,需要特别拎出来小括号的内容做例外。

还有一种是,当链接作为别名放到文末以后,格式变成了:'[]: url',这个 url 也需要例外处理。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.