お知らせ

  • 利用規約を守って投稿してください。また、よくある質問および投稿の手引きも参照してください。
  • メッセージの投稿にはアカウントが必要です。未登録の方は、ユーザ登録ページからアカウントを作成することができます。

#1 2015-07-13 21:56:57

yaneno-suzume
メンバ
From: 名古屋
登録日: 2013-06-30

gedit で全角文字を半角に変換したいのですが…

いつもお世話になっております。

さて、ubuntu を入れてからテキストエディタ gedit を使っているのですが、
全角文字を半角に、あるいはその逆、等々の変換をしたいと思っています。

#もちろん gedit 以外を使って良ければ可能ですが
 (コマンドラインツールとか、Mozc で再変換とか)、
 エディタ上でパッと変換できたら便利なので。
 (Windows では TeraPad にそのような機能あり)。

「外部ツール」を使うとできそうなのですが、なかなか上手く行きません。

やってみたこと:
まずは英大文字を半角に変換するツールを作ってみることにしました。
【手順】
(外部ツールを有効にする)
 メニューバー→編集→設定→プラグイン→外部ツール にチェック
 メニューバー→ツール に External Tools と Manage External Tools が現れる
(外部ツールを自作する)
 Manage External Tools をクリック→外部ツールの管理 ウィンドウが開く
 (左側)ツール の下方にある[+]をクリック
  →(左側)ツール一覧に NewTool が現れるので名前を付ける
   ここでは「半角に変換」とする
 (右上)編集 ペインにシェルスクリプトを書く
  1行目の #!/bin/sh と 2行目(空白行)は自動生成される

コード:

#!/bin/sh

sed -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'

 (右下)それぞれ設定する(*印は既定値)
  ショートカットキー : Shift+Ctrl+H
 * 保存:なし
  入力:現在の選択範囲
  出力:現在の選択範囲を置き換える
 * 適用範囲 : すべてのドキュメント * All Languages
 [閉じる]をクリックして作成完了
 メニューバー→ツール→External Tools の中に 半角に変換 が現れる

これで変換できるかと思ったのですが、
(例題テキスト)

コード:

ABCDE
FGHIJ

"ABC"を選択して実行した結果

コード:

DE
FGHIJ

となって、"ABC"が消えてしまいます。

"DE\n
FG"を選択して実行した結果(\nは改行)

コード:

ABCDE
HIJ

となって、改行以降の文字が消えてしまいます。

(スクリプトその2)
そこで、選択範囲の後に改行を追加するよう、スクリプトを編集しました
(まだシェルやスクリプトに詳しくないので、
 どうしてそうなるのか理解できていませんが)。

コード:

#!/bin/sh

(cat -; echo)          |
sed -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'

(スクリプトその2のテスト)
(例題テキスト)

コード:

ABCDE
FGHIJ

"ABC"を選択して実行した結果

コード:

ABC
DE
FGHIJ

"DE\n
FG"を選択して実行した結果(\nは改行)

コード:

ABCDE
FG
HIJ

となって、選択範囲の後に余分な改行が入ります。

ですから、スクリプトを追加して
最後の改行を削除すればよいことになりますが、
その方法が難しくて分かりません。

いくつかコマンドを調べたり、
C言語で小プログラムを書いたりしてみたのですが、
うまくできませんでした。

私の推測では、
・文字はバッファに貯められ、改行文字が入力されたタイミングで1行分処理される
・ファイル末尾に改行文字がない場合、シェルが自動的に改行文字を付ける
のだと思いますが、合っていますでしょうか?

そのようなわけで
・どうしたらgedit上で全角←→半角が変換できるか
 (既にそのようなツールがあるのだと思いますが)
・自分で外部ツールを作る方法だとどうしたら良いか
 (方法が理解できればその他のツールも作れるでしょうから)

ご教授いただけませんでしょうか。よろしくお願いします。
gedit は 3.4.1、
ubuntu 12.04 (precise) 32-bit です。

オフライン

 

#2 2015-07-13 23:57:25

hellfire
メンバ
From: 日本/神奈川県
登録日: 2006-11-21

Re: gedit で全角文字を半角に変換したいのですが…

yaneno-suzume さん

解決法ではないのですが、LinutMint 17.2 の gedit だと、最初のコマンドでうまくいきます。
バージョンを確認した所、2.30.5+qiana という LinuxMint 独自のものです。
一応、Ubuntu 版の 3.10.4-0ubuntu4 もインストールできるので、
そちらの方も試してみましたが、そちらは yaneno-suzume さんと同じ症状になりました。

なので、Ubuntu のパッケージ固有のバグである可能性が高いと思われます。


…。
これで終わらせる予定だったのですが、少し気になったので、
あまり快適とは言えませんが、何とかなる方法を見つけたので紹介します。
これも gedit の外部ツールを使う方法です(別に端末からでもできますが)。
まず、xclip というプログラムをインストールします。端末から

コード:

$ sudo apt-get install xclip

そして、gedit の外部ツールのコマンドの部分を以下のように変更します。

コード:

#!/bin/sh

xclip -o | sed -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' | xclip -i -selection clipboard

入出力はいずれも「なし」で OK です。
それで、文字列を選択、Ctrl + c でコピーして、外部コマンドの実行ショートカットキー(Shift+Ctrl+h)を押して、
Ctrl + v で同じことはできます。
やって分かる通り、キー操作はまどろっこしいので、ホントの次善策です。

やっていることは、xclip はクリップボードを操作するコマンドですので、
xclip でクリップボードの内容を取得して、sed で変換、クリップボードに出力。
最後に gedit に出力(貼り付け)をさせているだけです。

オフライン

 

#3 2015-07-14 08:19:42

yama
メンバ
登録日: 2006-10-23

Re: gedit で全角文字を半角に変換したいのですが…

気になったのでテストしてみました。
ubuntu 14.04では最初の方のシェルスクリプトで正常に動作しました。

オフライン

 

#4 2015-07-16 03:07:11

yaneno-suzume
メンバ
From: 名古屋
登録日: 2013-06-30

Re: gedit で全角文字を半角に変換したいのですが…

早速のご回答ありがとうございます。

どうやら gedit のバージョンにより不具合があるということですね。

xclip を使う方法はこちらでもうまくいきました。

#14.04LTS は一度入れてみたのですが、
 ほどなくHDDが故障したので、また 12.04LTS に戻っています。とほほ。

オフライン

 

Board footer

Powered by FluxBB