フォーラムの返信を作成しました。
- 作成者投稿
- rokuメンバー
編集中の文書からスニペットプラグインにテキストをドロップすると強制終了します。
EmEditor Pro 8.00 beta 9, Windows Vista Business Service Pack 1 です。rokuメンバーご回答ありがとうございます。
標準の設定で何も選択していない時に行が切り取られるのは違和感があるのですが、慣れの問題かもしれません。
キーボードマップを使ってみます。rokuメンバー[コピー][切り取り]コマンドについての要望です。
[コピー] コマンドは選択範囲がないときには現在行をコピーするようになりました。以前の動作は [選択範囲をコピー] コマンドを使用することにより選択できます。
[切り取り] コマンドは選択範囲がないときには現在行を切り取るようになりました。以前の動作は “選択範囲を切り取り” コマンドを使用することにより選択できます。[切り取り]コマンドでは、選択範囲がないとき現在行が切り取られるようになりますが、個人的には「ctl + z」を押すつもりで「ctl + x」を押してしまったときのようなタイプミスのときに危ない気がします。上の動作は他のエディタでも一般的なものでしょうか。
[コピー]や[切り取り]コマンドの標準の動作は従来と同じにして、行コピーや行切り取りを使いたい場合は[行コピー][行カット]コマンドを使用するという仕様にしていただけないでしょうか。rokuメンバー出来ました!
ありがとうございます。rokuメンバー追加させていただきます。
=====================================
名前: 単語の出現回数を数えるマクロ
版: 1.0
用途: 英数字とアンダースコアで構成される単語の
出現回数を数えます。
コメント: プログラムのトークンの出現回数を数えて、
極端に出現回数が少ないものを打ち間違いと見なし、
出現回数が多いものの中に近い単語があれば
それを正解として修正する、ということを目標に、
第一歩として作ったのですが、なかなか難しいです。
acos が cos に修正されては困るのです。
その後あまり使う機会がありません。
=====================================/* word counter */
FIND_WORD = “[_a-zA-Z][_a-zA-Z0-9]*”;
FIND_FLAG = eeFindNext | eeFindReplaceCase | eeFindReplaceOnlyWord
| eeFindReplaceRegExp | eeFindAround;
dic = new ActiveXObject(“Scripting.Dictionary”);Window.Redraw = false;
word = GetNextWord();
StorePosition();do{
RegisterWord(word);
word = GetNextWord();
}while(!IsOriginalPosition());PrintWords();
Window.Redraw = true;
dic = null;function StorePosition(){
originalBottomX = document.selection.GetBottomPointX(eePosLogical);
originalBottomY = document.selection.GetBottomPointY(eePosLogical);
}function GetNextWord(){
document.selection.WordRight();
document.selection.Find(FIND_WORD, FIND_FLAG);
document.HighlightFind = false;return document.selection.Text;
}function IsOriginalPosition(){
bottomX = document.selection.GetBottomPointX(eePosLogical);
bottomY = document.selection.GetBottomPointY(eePosLogical);if (bottomX == originalBottomX && bottomY == originalBottomY)
return true;
else
return false;
}function RegisterWord(word){
if(dic.Exists(word)){
n = dic.Item(word);
dic.Item(word) = n + 1;
} else {
dic.Add(word, 1);
}
}function PrintWords(){
editor.NewFile();
newDoc = editor.ActiveDocument;total = 0;
words = dic.Keys().toArray().sort();
//words = words.sort(SortByCount);
for(i in words) {
n = dic.Item(words);
newDoc.selection.Text = words + “, ” + n + “n”;
total += n;
}
newDoc.selection.Text = “——————–n”;
newDoc.selection.Text = “total ” + total + ” words.n”;
}function SortByCount(a, b){
i = dic.Item(a);
j = dic.Item(b);if (i > j) return -1;
else if (i b) return 1;
else if (a < b) return -1;
else return 0;
}
rokuメンバーtakuya 様
マクロをありがとうございます!
早速使わせて頂いております。
正にこれです。Yutaka 様
ご回答ありがとうございます。
普段マクロにショートカット キーを割り当てて使って
いますが、マクロの数が増えるとマクロツールバーは
便利そうですね。是非使ってみたいと思います。rokuメンバー・
・||
この二つの正規表現はマッチする箇所は一緒ですよ。ご指摘の通り同じですね。 。
試しに JavaScript マクロで
下の正規表現で検索してみたところ、・b(str|str1|str2)b —> (4)
・b(str1|str2|str)b —> (5)
・bstr[12]?b ———> (6)(4)、(5)、(6) とも結果は同じで、
str, str1, str2 の全てにマッチしました。(1)、(2)、(3) も (4)、(5)、(6) と同じ結果になる事を
予想していたのですが、(1) は違う結果になりました。EmEditor の検索では、正規表現の検索と、
単語かどうかの判断が別の段階で行なわれている
ために、(1) が (4) と同じにならないのでしょうか。(1) が (4) と同じ結果になって欲しいのですが、
当面はなるべく (3) を使うようにします。
ありがとうございました。rokuメンバーご回答ありがとうございます。
str1 がマッチするかどうかを判定する際に、
下のような手順になっているようですね。(1) -> str1 の str の部分がマッチ -> 単語でない -> マッチせず
(2) -> str1 全体がマッチ -> 単語である -> マッチする使う側から見ると、(1) と (2) は同じ結果になって欲しいのですが、
左から順に判定されることを考慮する必要があるのですね。
いずれにしてもこの例では (3) が確実ですね。仮に、単語の先頭の正規表現を とすると、
単語のみ検索する場合には、 を検索するようです。
私が想定していたのは || でした。それから、「ファイルから検索」でも同じ結果になるので、
強調表示されていないだけではなく、ヒットしていないようです。
ありがとうございました。 - 作成者投稿