tmp.txt
ファイルの内容を考慮してください。
x
abcd
VIMで開き、そのc
文字にカーソルを移動したいです。そのため、次のパラメータを使用してVIMを実行します。
$ vim -c "/c" tmp.txt
ただし、カーソルはに設定されますa
。 VIMが見つかるように見えますが、c
カーソルを行の先頭に置きます。/c
ファイルが開いている間にVIMノーマルモードで実行すると、なぜ異なる動作をしますか?
答え1
-s
(スクリプト)オプションを使用して、最初の一致にカーソルを置くことができます。 ~によるとvim マニュアル:
-s
{スクリプト}
スクリプトファイル{スクリプト}読んだ。ファイルの文字は、ユーザーが入力したように解釈されます。 「コマンドを使用して同じ操作を実行することもできます。:source!
{スクリプト}エディタが終了する前にファイルの終わりに達すると、キーボードからより多くの文字が読み取られます。
bash
キー入力またはプロセスの交換(使用する場合)と一緒に一時ファイルを使用できます。たとえば、
#!/bin/bash
vim -s <(printf '/c\n') tmp.txt
この方法は、単一文字よりも複雑な検索に適しています。
答え2
最初の試み
+/
マンページに次のように説明されているコマンドオプションの使用を検討しました。
+/{pat}
- 最初のファイルの場合、カーソルは最初の項目にあります{pat}
。
しかし、マニュアルページの説明は誤解を招く可能性があります。言い換えれば、ex
行ベースのコマンドを使用する場合、検索がどのように機能するかと同様に、カーソルが実際に検索パターンを含む最初の行の最初の文字に配置されます。
更新:Vim 8.1以降、このオプションの実際の動作を反映するようにマニュアルページが更新されました。
最初のファイルの場合、カーソルはその行の最初の項目に置かれます。
{pat}
作業ソリューション
より良い解決策は、(コマンドに改行を渡すために必要な)-c
オプションを使用してVimを通常モードで開いたかのように検索を実行することです。:execute
\n
:normal
一般的な解決策:
vim -c 'execute "normal /pattern\n"' filename
上記の例の解決策:
vim -c 'exe "norm /c\n"' tmp.txt