1 件の投稿を表示中 (合計 13 個)
  • 作成者
    投稿
  • #3834
    kfu
    メンバー

    emeditorを使い始めて4年ほどになります。軽くて気に入っています。 :-)

    テキスト中のアルファベットの大文字と小文字を入れ換えることはできるでしょうか。

    英文でメモをとるのに使ったりもしますが、CAPS LOCKのまま気づかずに、うっかり一段落ほど入力してしまうことが有ります。大文字と小文字が逆になってしまうのですが、そんなときに、これができるとありがたいです。UNIXのviエディタではSHIFT+^でできるのと同じ機能です。
    #選択範囲を一括変換でも良いです。

    あと、emacsのCTRL+tみたいにカーソル位置の二文字を逆順に入れ換えられると、typoの修正がやりやすいのですが…

    #3835
    ShuHei
    メンバー

    マクロを使えばご希望のことは可能です。
    下記コードの//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'])
    }
    }

    #3836
    kfu
    メンバー

    ShuHeiさん、ありがとうございます。:-)

    要望に合せて手作り頂いて恐縮です。希望通りのことができそうで楽しみなのですが、
    マクロのメニューに「これを選択」が見当たりません。もしかしてProfessional Edition 限定技でしょうか。
    当方はStandard Editionを使用しております。
    それとも、見ているメニューが違いますか。

    よろしくお願いします。

    #3837
    takuya
    参加者

    Script言語を使ったマクロは、EmEditor Professional 版限定ですね。。。端末でruby や Pythonが使えるなら、swapcase関数で直接ファイルを書き換えた方がはやいかもしれないですね。

    #3839
    ShuHei
    メンバー

    kfuさん

    すみません、てっきりProfessionalユーザーの方かと
    思っていました・・・

    デフォルトで文字列を反転させたり、ローマ字の大文字小文字をスワップさせる機能はありません。(見落としていたら御免なさい)

    頻繁に文字列の変換などを行うならばProfessionalを
    購入されるか、既製のものであればその都度gvimとかemacsとか利用されたほうが手っ取り早いと思いますよ。

    #takuyaさん補足ありがとうございます。

    #3843
    kfu
    メンバー

    ShuHeiさん

    了解しました。ありがとうございました。私も、どこかの機能に隠れていないか探したつもりですが、見当たりませんでした。

    現状で3本のStandardライセンスを持っているので、Professionalで3本買い直すのはちょっとつらい…

    #3847
    ShuHei
    メンバー

    StandardからProfessionalに1,500円くらい
    でアップグレードできるライセンスがあればいいんですがねぇ。

    Professionalは試用もできますので、もし機会が
    あったら今回書いたマクロ使ってみてください。

    他にもここのライブラリやEmEditor Wikiなどに
    日々の作業を楽にしてくれるマクロがあるので一度
    ずらーっと試してみると良いですよ

    #3849
    prometheus
    メンバー

     もう遅いかもしれませんが、マクロはだめでもプラグインなら Std版でも動作するはずです。
     もしまだ必要でしたら作ってみますが。

    #3851
    kfu
    メンバー

    Professionalで試してみました。

    大文字小文字は期待通りです。
    ただ、文字の入替はカーソル位置の「二文字」だけを入れ換えたいのですが、単語全体が反転されてしまいます。whiel(whileのtypo)みたいのを直すのにあると便利で、emacs等には用意されていた機能と思います。
    とりあえず、大文字小文字の入替だけでも助かります。ありがとうございました。

    #functionの名前はswap->convcase, reverse->transposeに書き換えさせてもらいました。
    #ぜいたくを言うと、メニュー無しのショートカットキーで起動したいところですが、これはマクロでは無理ですよね。

    #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/
    の最下部の注意はご覧になられましたか。

    #3857
    ShuHei
    メンバー

    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さんのマクロを使ったほうが
    様々なケースでも変換できるのでオススメです。

    #3871
    takuya
    参加者

    >ライブラリにあるtakuyaさんのマクロを使ったほうが

    紹介ありがとうございます。このスレッドみてて、私の方で準備したマクロを公開しています。ShuHeiさんのとかぶってしまってすいません。。。

    #3877
    kfu
    メンバー

    ShuHeiさん

    ありがとうございます。試してみたところ、完全に期待通りです。
    ショートカットキーの登録もできたので、vi, emacsとキータッチまで
    同じ割当てで呼び出せるようになりました。(^_^)v
    厳密にいうと、大文字・小文字の方はviではワード全体ではなく、現在カーソルのある文字だけに作用し、作用後、カーソル位置が右に一文字ズレます。これにより、予め選択しておかなくても画面を見ながら必要な範囲まで大文字・小文字の入替が行われました。自分でも見よう見まねで改造できないかと思いましたが、一文字だけを対象にする方法がわからずあきらめました。

    takuyaさんのマクロの方はまだ試していませんが、すごくコンパクトにまとまっていて感心しました。

    P.S.
    しばらくここを見ておらず、遅くなりました。(_o_)

1 件の投稿を表示中 (合計 13 個)
  • このトピックに返信するにはログインしてください。