从vim内部调用时,Ruby库不返回任何内容(过滤器)

时间:2016-07-04 10:37:12

标签: ruby vim

我有一个今天早些时候工作的过滤器脚本。该脚本将中文字符行作为输入,并输出它们的拼音表示(使用chinese_pinyin gem)。

#!/usr/bin/env ruby

require 'pry'
require 'chinese_pinyin'


STDIN.each_line do |line|
  puts '--------'
  puts line
  puts '--------'
  puts Pinyin.t(line, tonemarks: true)
  puts '--------'
  puts `ruby -v`
end

今天我的计算机停滞(非常罕见)并重新启动。之后,此脚本将仅在命令行上运行,而不是从vim内部作为过滤器。

命令行:

benlieb@bens.local 06:28 PM ~/bin >
$ echo "我" | topy
--------
我
--------
wǒ
--------
ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-darwin13]

现在从vim内部过滤一行包含“我”的行:

:'<,'>!topy  

我明白了:

  1 --------
  2 我
  3 --------
  4
  5 --------
  6 ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-darwin13]  

进一步检查显示

Pinyin.t(line,tonemarks:true)

在vim过滤器的情况下返回一个空字符串。

我能看到的唯一区别是vim似乎是接收ASCII-8BIT编码的文本,而从CLI它是utf8。

我试图在脚本中强制使用utf8编码,

  line = line.force_encoding("UTF-8")

但似乎没有效果:

--------
我
ASCII-8BIT
UTF-8
--------

--------
ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-darwin13]

发生了什么以及可能导致这些脚本表现得如此不同的原因?

0 个答案:

没有答案