11

Vim を (家でも職場でも) 使用していると、同じようなことを繰り返していることに気がつくことがよくあります。たとえば、一連の CSV テキストを一連の SQL 挿入に変換する場合があります。私は Vim を何年も使用してきましたが、Vim を使用しながら生産性を向上させる方法を真剣に考えようとしたのはつい最近のことです。

私の質問は..一般的に使用されるコマンドまたはコマンド シーケンスを保存する良い方法 (または正しい方法) はありますか? そして、それらをどのように実行するのが最善の方法ですか? ライブ セッションで同じスクリプトを使用したり、ファイルに対してコマンド ラインを介して使用したりできると便利です。

それらを .vim ファイルに保存して、同僚 (vim に習熟していない) に渡して使用できるようにしたいと考えています。

4

4 に答える 4

14

たとえば、このように一般的なタスク マクロを .vim ファイルに保存し、コマンド:so file.vimでそれらをロードできます。

ここでは、便利なマクロの束を見つけることができます。また、便利なq マクロ記録コマンドをよく学ぶことをお勧めします。これは非常に強力です...

qコマンドで作成されたマクロはレジスタに格納され、qq はマクロを q レジスタに格納するため、記録を終了するときはマクロを貼り付けて「qp」で保存し、後でヤンクするだけでロードできます。マクロをレジスターに挿入します。つまり、 「qY、マクロはテキストのみであり、q の代わりに任意のレジスターを使用できることを覚えておいてください。qマクロを格納するための Vim スクリプトがあります。

marvim : VIM のマクロ永続ストレージおよび共有可能リポジトリ

Vim Scripting Languageも参照してください。

于 2008-11-01T07:57:32.833 に答える
3

q/を使用@して、マクロを頻繁に記録/再生します。

次のステップは、3 つ以下の ex コマンドなどを書き込もうとすることです。

非常に複雑でマクロや短い ex シーケンスでは不十分な場合は、代わりに Perl スクリプトとして書く傾向があります。私の好みでは、vim スクリプト言語は少し制限がありすぎて、壮大なことをしようとはしません。(ただし、vim 7 は Python から多くのものを借用することで、その点で大きな進歩を遂げました。)

は非常に単純なことを行うことに注意してください@。レジスタの内容を取得し、通常モードで入力したかのように再生します。同様qに、名前を付けたレジスターに入力しているシーケンスを単純に記録します。これらは、ヤンク/プットに使用するのと同じレジスタです。つまり、記録されたシーケンスをファイルに直接貼り付けたり (.vimrc誰か?)、ファイルから一連のコマンドをヤンクして再生したりできます (したがって、一連のコマンドを保持できます)。それらの~/my-vim-macros.txtまたは何か)。

于 2008-11-02T03:59:35.077 に答える
2

コマンド シーケンスを に保存.vimrcし、コマンドでキー バインドを割り当てることができます:map。例えば:

echo >>~/.vimrc ":map ,c :%s/,/','/g<CR>:%s/^/('/g<CR>:%s/$/'),/g<CR>"

ライブ セッションで" " を押す,cと、CSV ファイルが INSERT ステートメントの一部に変換されます。

コマンドラインでは、まったく同じ編集をファイルに適用できます(これは上書きされます。最初にバックアップしてください):

vim file.txt -c ':normal ,c | :x'

より良い方法があるかもしれませんが、これはうまくいきます。

于 2008-11-01T08:28:22.350 に答える
1

個人的には、vimが存在するずっと前にUnixを使用していたためかもしれません(私が使用したUnixの最初のバージョンにも「vi」はありませんでしたが、それは別の話です)、通常は「シェルスクリプト」を使用します(または、より可能性が高いのは、Perlスクリプト)を使用して変換を行うことです。CSVデータをINSERTに変換する場合、引用符/非引用符および埋め込みコンマを完全に一般的に処理するのは面倒です。正しい解析を保証するために、Text::CSV_XSでPerlスクリプトを使用することを目指しています。次に、変換が必要なテキストの範囲でそのスクリプトを実行します。

これの利点の1つは、焦点を絞ったツールアプローチです。1つのツールが1つの仕事を正しく実行します。私のプライベートbinディレクトリには、300以上のスクリプトとプログラムが含まれています。RCSディレクトリには500を超えるスクリプトが含まれています。

これは、vimでのスクリプトが悪いと言っているのではありません。私は(多かれ少なかれ)複雑なマップコマンドを使用して複雑な操作を記述します。多くの場合、一連のファイル全体で同じ変更を行う必要があり、スクリプトを作成する価値がないと思われる場合です。仕事。ただし、変更が複数回必要になる可能性があると思われる場合は、スクリプトを作成します。たとえば、GCCは、オブジェクトファイルに未使用の静的文字列を埋め込まないことについて(2005年頃)気が狂い始めました。つまり、バージョン管理情報が表示されませんでした。そのため、何年にもわたって、ソースファイルを編集するときに、静的な(固定された)名前からパブリック名に変換しました-しぶしぶ、しかし必然的にAFAIAC。その編集を行うスクリプトがあるので、ファイルに変更を加える必要がある場合は、そのスクリプトを実行して変更します。著作権情報を更新する別のスクリプトがあります。特定の年に最初にファイルを変更するたびに、それが必要です。ええ、私はおそらくそれをvimの何かとして隠しておくことができます-私は別のスクリプトの方が良いと思って育ちました。特に、他のエディターに切り替えてもスクリプトを使用できるからです。

于 2008-11-01T16:18:47.830 に答える