- 作成者投稿
- 2006年11月27日 12:43 pm #3834kfuメンバー
emeditorを使い始めて4年ほどになります。軽くて気に入っています。 :-)
テキスト中のアルファベットの大文字と小文字を入れ換えることはできるでしょうか。
英文でメモをとるのに使ったりもしますが、CAPS LOCKのまま気づかずに、うっかり一段落ほど入力してしまうことが有ります。大文字と小文字が逆になってしまうのですが、そんなときに、これができるとありがたいです。UNIXのviエディタではSHIFT+^でできるのと同じ機能です。
#選択範囲を一括変換でも良いです。あと、emacsのCTRL+tみたいにカーソル位置の二文字を逆順に入れ換えられると、typoの修正がやりやすいのですが…
2006年11月27日 4:48 pm #3835ShuHeiメンバーマクロを使えばご希望のことは可能です。
下記コードの//Initializeから最後の}までコピーし、
emeditorで新しい文章を開いてペーストし、text_support.jseeという名前をつけて保存してください。そのままtext_support.jseeを開いたまま
1.メニューの「マクロ」より「これを選択」をクリック
2.メニューの「マクロ」より「実行(R)」をクリックそうするとポップアップで
文字を逆にする(T)
大文字小文字を反転する(^)
と表示されるのでお好きな処理を選んでください。
(ヘルプのキーボードマップでこのマクロ設定しておくと便利です)デフォルトでは選択範囲がないとキャレットがある位置の単語を対象に処理を行います。
#息抜きで作ったのでどこか間違ってたらごめんなさい・・・
//Initialize
pos = new Object;
commands = new Array;
ccase = new Array;commands[1] = {
“function” : “reverse”,
“label” : “文字を逆にする(&T)”
}
commands[2] = {
“function” : “swap”,
“label” : “大文字小文字を反転する(&^)”
}ccase[1] = “toLowerCase”;
ccase[2] = “toUpperCase”;String.prototype.reverse = function(){
return this.split(“”).reverse().join(“”);
}
String.prototype.swap = function(){
return swap(this.split(“”));
}//Main
getPos();menu = CreatePopupMenu();
for(var n in commands)
menu.Add(commands[n][‘label’],n);result = menu.Track( 0 );
if( result != 0 ) execute(result)setPos();
Quit();//Functions
function execute(num)
{
document.selection.Text = getText()[commands[num][‘function’]]();
}function getText()
{
with(document.selection)
{
if(!(w = Text))
{
selectWord();
w = Text;
}
}
return w;
}function swap(array)
{
for(i=0;i 64 && num < 91) ? 1 : 2;
}function getPos()
{
with(document.selection)
{
pos = {
x : GetActivePointX(eePosLogical),
y : GetActivePointY(eePosLogical)
}
}
}function setPos()
{
with(document.selection)
{
SetActivePoint(eePosLogical,pos['x'],pos['y'])
}
}2006年11月28日 5:31 am #3836kfuメンバーShuHeiさん、ありがとうございます。:-)
要望に合せて手作り頂いて恐縮です。希望通りのことができそうで楽しみなのですが、
マクロのメニューに「これを選択」が見当たりません。もしかしてProfessional Edition 限定技でしょうか。
当方はStandard Editionを使用しております。
それとも、見ているメニューが違いますか。よろしくお願いします。
2006年11月28日 11:24 am #3837takuya参加者Script言語を使ったマクロは、EmEditor Professional 版限定ですね。。。端末でruby や Pythonが使えるなら、swapcase関数で直接ファイルを書き換えた方がはやいかもしれないですね。
2006年11月28日 12:09 pm #3839ShuHeiメンバーkfuさん
すみません、てっきりProfessionalユーザーの方かと
思っていました・・・デフォルトで文字列を反転させたり、ローマ字の大文字小文字をスワップさせる機能はありません。(見落としていたら御免なさい)
頻繁に文字列の変換などを行うならばProfessionalを
購入されるか、既製のものであればその都度gvimとかemacsとか利用されたほうが手っ取り早いと思いますよ。#takuyaさん補足ありがとうございます。
2006年11月29日 7:00 am #3843kfuメンバーShuHeiさん
了解しました。ありがとうございました。私も、どこかの機能に隠れていないか探したつもりですが、見当たりませんでした。
現状で3本のStandardライセンスを持っているので、Professionalで3本買い直すのはちょっとつらい…
2006年11月29日 6:48 pm #3847ShuHeiメンバーStandardからProfessionalに1,500円くらい
でアップグレードできるライセンスがあればいいんですがねぇ。Professionalは試用もできますので、もし機会が
あったら今回書いたマクロ使ってみてください。他にもここのライブラリやEmEditor Wikiなどに
日々の作業を楽にしてくれるマクロがあるので一度
ずらーっと試してみると良いですよ2006年12月1日 5:36 am #3849prometheusメンバーもう遅いかもしれませんが、マクロはだめでもプラグインなら Std版でも動作するはずです。
もしまだ必要でしたら作ってみますが。2006年12月1日 6:02 am #3851kfuメンバーProfessionalで試してみました。
大文字小文字は期待通りです。
ただ、文字の入替はカーソル位置の「二文字」だけを入れ換えたいのですが、単語全体が反転されてしまいます。whiel(whileのtypo)みたいのを直すのにあると便利で、emacs等には用意されていた機能と思います。
とりあえず、大文字小文字の入替だけでも助かります。ありがとうございました。#functionの名前はswap->convcase, reverse->transposeに書き換えさせてもらいました。
#ぜいたくを言うと、メニュー無しのショートカットキーで起動したいところですが、これはマクロでは無理ですよね。2006年12月1日 4:06 pm #3854匿名ゲスト実行したいマクロをマイマクロに追加してからメニューバーの「マクロ」をクリック。
追加したマクロの左端に表示されている「下線付きの数字」を確認。
キーコンビネーション[Alt+M+下線付きの数字]でマクロが実行されます。もう一つのマクロはこんな感じですか。
‘ カーソル位置の左右の文字を入れ替えるマクロ(.vbee)
Option Explicit
Const CHAR_NUM = 1
With document.selection
.CharLeft True, CHAR_NUM
.Cut
.CharRight False, CHAR_NUM
.Paste eeCopyUnicode
.CharLeft False, CHAR_NUM
End With背中を押すわけじゃないけれど、購入方法のページ
http://jp.emeditor.com/modules/buy-now0/
の最下部の注意はご覧になられましたか。2006年12月2日 4:09 pm #3857ShuHeiメンバーemacs等には用意されていた機能と思います
すみません、思いっきり誤解してました。
emacsのtranspose-charsだと大体こんな感じですね。
参考までにどうぞ。transpose_chars.jsee
Redraw= false;
transpose_chars();
Redraw = true;
Quit();// Functions
function transpose_chars()
{
if(isStartOfDocument())
{
status = “Beginning of buffer”
return;
}transpose_chars = document.selection.Text;
if(transpose_chars == “”)
{
with(document.selection)
{
if(!isEndOfLine())
CharRight(false,1)CharLeft(true,2);
transpose_chars = Text;
line = transpose_chars.split(“”).reverse()
if(line[1] == “n” && line[2] == “r”)
{
//CR+LFの帳尻あわせ
nline = new Array;
nline[0] = line[0];
nline[1] = line[2]+line[1];
line = nline;
}
Text = line.join(“”);
}
}
}function isStartOfDocument()
{
var p = new Object;
p = getPos()
return (p[‘x’] == 1 && p[‘y’] == 1) ? true : false;
}function isEndOfLine()
{
var p;
with(document.selection)
{p = getPos();
x1 = GetActivePointX(eePosLogical);
EndOfLine()
x2 = GetActivePointX(eePosLogical);
setPos(p);
}
return (x1 == x2) ? true : false;
}function getPos()
{
var pos = new Object;
with(document.selection)
{
pos = {
x : GetActivePointX(eePosLogical),
y : GetActivePointY(eePosLogical)
}
}
return pos
}function setPos(pos)
{
with(document.selection)
{
SetActivePoint(eePosLogical,pos[‘x’],pos[‘y’])
}
}#functionの名前はswap->convcase, reverse->transposeに書き換えさせてもらいました。
#ぜいたくを言うと、メニュー無しのショートカットキーで起動したいところですが、これはマクロでは無理ですよね。ショートカットキーはマクロを一度実行後にヘルプメニューの「キーボードマップ」から割り当てられます。
ちなみに大文字小文字をスワップするマクロは
ライブラリにあるtakuyaさんのマクロを使ったほうが
様々なケースでも変換できるのでオススメです。2006年12月7日 5:31 pm #3871takuya参加者>ライブラリにあるtakuyaさんのマクロを使ったほうが
紹介ありがとうございます。このスレッドみてて、私の方で準備したマクロを公開しています。ShuHeiさんのとかぶってしまってすいません。。。
2006年12月13日 5:26 am #3877kfuメンバーShuHeiさん
ありがとうございます。試してみたところ、完全に期待通りです。
ショートカットキーの登録もできたので、vi, emacsとキータッチまで
同じ割当てで呼び出せるようになりました。(^_^)v
厳密にいうと、大文字・小文字の方はviではワード全体ではなく、現在カーソルのある文字だけに作用し、作用後、カーソル位置が右に一文字ズレます。これにより、予め選択しておかなくても画面を見ながら必要な範囲まで大文字・小文字の入替が行われました。自分でも見よう見まねで改造できないかと思いましたが、一文字だけを対象にする方法がわからずあきらめました。takuyaさんのマクロの方はまだ試していませんが、すごくコンパクトにまとまっていて感心しました。
P.S.
しばらくここを見ておらず、遅くなりました。(_o_) - 作成者投稿
- このトピックに返信するにはログインしてください。