
Ubuntu日本語フォーラム

ログインしていません。
いつもお世話になっております。
さて、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 です。
オフライン
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 に出力(貼り付け)をさせているだけです。
オフライン
気になったのでテストしてみました。
ubuntu 14.04では最初の方のシェルスクリプトで正常に動作しました。
オフライン
早速のご回答ありがとうございます。
どうやら gedit のバージョンにより不具合があるということですね。
xclip を使う方法はこちらでもうまくいきました。
#14.04LTS は一度入れてみたのですが、
ほどなくHDDが故障したので、また 12.04LTS に戻っています。とほほ。
オフライン