2

gettextで国際化する必要のある多くの文字列を含むphp/htmlファイルがたくさんあります。したがって、各ファイルを調べて、「メッセージ」文字列を見つけ、それぞれを次のように置き換える必要があります。

<?= _("<my string>") ?>

CtrlR私はvimを使用しており、挿入モード(たとえばWith)で簡単に実行できるようにショートカット(マップ)を設定したいと思います。

あなたはそれを達成する方法を知っていますか?

4

4 に答える 4

3

これを実現するには、TimPopeのすばらしいサラウンドプラグインを使用します。

~/.vim/after/ftplugin/php.vimファイルに以下を追加します。

let b:surround_{char2nr('_')} = "<?= _(\"\r\") ?>"

これで、ビジュアルモードでいくつかを選択してからサラウンドできます。たとえばvitS_ 、挿入モードの場合は、を介してテキストを囲むことができ<c-s>_、カーソルは二重引用符の間に挿入されます。

ボーナスとして、周囲<?= _("<text here>") ?>を削除してそのままにしておきたい場合<text here>は、以下を追加することもできます~/.vim/after/ftplugin/php.vim

nmap <buffer> <silent> ds_ ds<dt(%df?[(xds"

ティム・ポープには素晴らしいプラグインがたくさんあります。そのうちのいくつかを見てみることを強くお勧めします。

詳細については、以下を参照してください。

:h surround
:h surround-customizing
:h after-directory
:h curly-braces-names
:h b:var
于 2012-08-04T03:01:09.773 に答える
1

この文字列を手動で囲み、メッセージにが含まれていない場合は"、(メッセージ内のどこかにカーソルを置いた後)次の手順を1回実行できます。

qaf"a)<Esc>2F"i_(<Esc>q

(実際のエスケープを押して<Esc>)次に、次のメッセージにカーソルを置いた後、これを繰り返します。

@a

(気に入らない場合はa、ここと上記の後に別のラテン小文字に置き換えてくださいq)。それでもマッピングが必要な場合:

:nnoremap <C-r> f"a)<Esc>2F"i_(<Esc>

。今回は<Esc>文字通り、、、、、<です。E_sc>

1つはマクロを使用することであり、マッピングの定義は入力する方が多いため、マクロは非常に便利です。'viminfo'オプションによっては、vimセッション間で保存される場合もありますが、実際にはこれに依存するべきではないため、永続的なものが必要な場合は、マッピングを使用してvimrcに配置します。

更新<? "message" ?>私が想定したものがないが、代わりに取得<tag>message</tag>した場合は、次のようにすることができます:

:nnoremap <C-r> f<i") ?><Esc>F>a<? _("<Esc>

。今回のメッセージには<またはを含めるべきではないことに注意してください>

于 2012-08-03T16:03:43.587 に答える
1

私の推測では、元のメッセージを実際に_()関数への入力にしたいのではないでしょうか。

私があなたに考えられる最善のことは、マクロを使用することです。これを行う場合、おそらく、1ワードの「メッセージ」(置換する必要がある)のマクロ@ 1、2ワードのメッセージの@ 2、3の@3などを記録するようなことをします。次に、ドキュメントをざっと読んだり検索したりして、@11語のメッセージの先頭に「 。」one に置き換えるなどの入力を行うことができ<?= _("one") ?>ます。two wordsメッセージをに変換するなどのメッセージに@2を使用<?= _("two words") />します。

1ワードメッセージのマクロを作成/記録するには、@ 1、できれば1ワードメッセージの先頭に次のキーを入力します。

q1i<?= _("<Esc>eli") ?><Esc>q

q 1 i < ? = Space _ ( " Esc e l i " ) Space ? > Esc q

eより多くの単語のマクロは非常によく似た方法で作成できます。さらに単語のsを追加するだけです。したがって、@ 2の場合は、次のように入力します。

q1i<?= _("<Esc>eeli") ?><Esc>q

q 1 i < ? = Space _ ( " Esc e e l i " ) Space ? > Esc q

非常に長いメッセージの場合は、おそらくオープンマクロとクローズマクロを使用します。開いているものは<?= _("カーソルがある場所に配置され、閉じているものはカーソルがある") ?>場所に配置されます。

于 2012-08-03T16:16:08.460 に答える
0

正規表現

Vimはこのようなタスクを非常に簡単に処理できます。前後の例がなければ、正確な解決策を提供することは困難ですが、vimの力の一部を示すために架空の解決策を作成します。<span>PHP関数によって実行されるタグ内のテキストを変更したいとします。私はこのようなスパンタグを持っているかもしれません:

<span>I need this text and all other span tags run through PHP!</span>

おそらく、仕事を成し遂げる最も簡単な方法は、正規表現を使用することです。例えば:

:%s/<span>\([^<]*\)<\/span>/<?= _("\1") ?>/g

これにより、ドキュメント内のすべてのスパンタグが検索され、適切に置き換えられます。これを複数のファイルで実行することもできます(を参照:help bufdo)。ただし、最初は正規表現が難しい場合があり、多くの人は時間をかけてそれをうまく学ぶことができませんでした。別のオプションは次のようになります。

CTRL-R

/<span><cr>f>lct<<?= _("<C-r>"") ?><esc>

ステップバイステップ

/<span><cr>-開始スパンタグを検索します

f>l-開始スパンタグの後の文字にカーソルを移動します

ct<<-次の文字までテキストを変更します

<?= _("<C-r>"") ?>-欲しいものを入れてください。(<C-r>"あなたが参照したように)は、名前のないレジスタの内容を入力します。"この場合は、ct<1分前に実行したテキストです。

<esc>-通常モードに戻ります

マクロこれ

これは、マクロとして使用すると便利な場合があります。もしそうなら、その周りのマクロでまったく同じことをしてください...

qq/<span><cr>f>lct<<?= _("<C-r>"") ?><esc>q

これで、次のタグ@qに対して同じことを実行するために実行できます。<span>一度使用した後は、100回使用する@qこともできます。@@100@q

于 2012-08-03T20:17:52.993 に答える