Open deris opened 10 years ago
vi(
でも試すとちょっとはすっきりするかもです。
vi(でも試すとちょっとはすっきりするかもです。
ごめんウソでした:cat2::dash:
OT) オナラっぽい
オナラ3連発! :dog2::dash::poop::dash:
ウンコ出てるで
ワンコからウンコが…
ハッ!なんかすっきりしたと思ったら…(すっきり違い)
今日のクソスレと聞いて飛んで来ました。
なにがしたい...
んもー!カレー食べてるのにー!!
使われているクォートがシングルクォートなのが原因です。
call hoge_func("\%(hoge\)")
これで hoge
の部分で v2i)
すれば () 内が選択出来るはずです。
で、じゃぁシングルクォート未対応かという話なんですが、ちょっと弄ってみたら動いたっぽいので一先ず出しておきますが、ちゃんと動くか未確認な部分が多いです。
diff -r dde8ff798ed9 src/search.c
--- a/src/search.c Sat Aug 30 18:10:19 2014 +0200
+++ b/src/search.c Tue Sep 02 21:20:57 2014 +0900
@@ -2153,6 +2153,7 @@
do_quotes = 0;
else if (do_quotes == -1)
{
+ int do_squotes = -1;
/*
* Count the number of quotes in the line, skipping \" and '"'.
* Watch out for "\\".
@@ -2161,10 +2162,12 @@
for (ptr = linep; *ptr; ++ptr)
{
if (ptr == linep + pos.col + backwards)
- at_start = (do_quotes & 1);
+ at_start = (do_quotes & 1) || (do_squotes & 1);
if (*ptr == '"'
&& (ptr == linep || ptr[-1] != '\'' || ptr[1] != '\''))
++do_quotes;
+ else if (*ptr == '\'' && (do_quotes & 1))
+ ++do_squotes;
if (*ptr == '\\' && ptr[1] != NUL)
++ptr;
}
@@ -2294,6 +2297,11 @@
pos.col += 2;
break;
}
+ else
+ {
+ inquote = !inquote;
+ start_in_quotes = FALSE;
+ }
}
}
/* FALLTHROUGH */
パッチありがとうございます! 現状ダブルクォートだと意識するんですね。 挙げていただいたパッチを試してみましたが、私の環境でも動作することを確認しました。 :+1:
タイトル変えました。
set cpo+=M
時の挙動がPatch 7.4.662で変わっています。ご確認下さい。
https://groups.google.com/d/msg/vim_dev/oNtLa6ZDB8c/UWmVhdvTj94J
Patch 7.4.662以降だと
set cpo-=M
時の挙動およびset cpo+=M
時の挙動は「仕様として正しい動作です」としか言えないです。。
'~' を "~" に変更して挙動が変わるのは(現在のfiletype
に関係なく)「C言語系の文字列の中("~")だったらコメントと同じ扱いとしてすっ飛ばす」か否かの違いということになります。
mattnさんのpatchで直るかもしれないけど、Vimソースの色んなところで「Cコメントをすっ飛ばす」「C文字列をすっ飛ばす」処理が呼ばれているので整合を取るのが難しいかもです。
最新に当ててパッチの動作が壊れてない事は確認したので一度出してみたいと思います。
@mattn 任せます。 ただ、skip_string() [misc1.c:5316] は'~'を文字列としてはみなしていないので、全体の整合的にどうかという懸念はあります。
僕もこのパッチでどう反応されるか分からないのでひとまず提案として出しました。
こんにちは
text-objectsの
i)
の挙動がよくわからなかったので質問させてください。text-objectsの
i)
の挙動が、cpoptions
のM
の指定有無で変わり、 この挙動が仕様なのかどうかがhelpを見た限りではわかりませんでした。試したサンプルを以下に記載します。
ケース1と3の動きはまぁ納得できるものなのですが、 ケース2とケース4の動きがよくわかりませんでした。
cpo-M
ありでバックスラッシュが無視されるのであれば、 ケース2、ケース4はhogeの部分が選択されるのが正しいように思えました。質問を整理すると、以下3点を確認したいです。
i)
の挙動がcpo-M
に依存するのは仕様か?よろしくお願いします。
P.S. 補足ですが、上記疑問は以下のようなコードでci)したときに 意図しない挙動だったため、調査したものです。
関数の引数部分を選択したかったのですが、エスケープが考慮されて 上記のような挙動になっていました。 現状動作を考えると、仕様のような気がしますがちょっと不便です。。。