web-dev-qa-db-ja.com

exと最後に一致する行を見つける方法は?

exコマンド$は、最後の行のfirst文字に移動します。したがって、逆方向検索を実行すると、現在表示されている行がスキップされます。 exを使用して最後の文字に移動する方法、または正規表現の最後の出現箇所を検索するにはどうすればよいですか?

例:

$ cd -- "$(mktemp --directory)"
$ printf '%s\n' foo bar foo bar > test.txt
$ ex -c '$' -c '?bar' -c 'visual' test.txt

この時点で、カーソルは4行目ではなく2行目にあります。 ex -c '?bar' -c 'visual' test.txtを使用すると、折り返したときに最後の行が見つかると期待していても、同じ結果が得られます(vimはそうします)。

Vim7.3の使用。

3
l0b0

exlast行から始まるようです--ex -c '1' -c '?bar' -c 'visual' test.txtカーソルを最後の行に移動します。

2
l0b0

私のバージョンのexでは、$+1?...は後方検索を開始しているように見えます最後の行:

sh$ ex -version
VIM - Vi IMproved 7.2 (2008 Aug 9, compiled Jul 12 2010 12:49:33)

sh$ ex -c '$+1?bar' -c visual test.txt
2
Sylvain Leroux

別の解決策:

ex -c '?bar' -c '/bar' -c 'visual' test.txt

デフォルトでは、「?bar」はファイルの最後の行から文字列barを検索しますが、最後の行の文字列は検索しません。したがって、最後の行から最初のbarを押すと、/bar正しくして、最後の行のbarに戻ります。

最後の行に文字列barが含まれていない場合、これは失敗します。

0
cuonglm