回答:
CtrlR- を使用して、テキストを削除し、コマンドの出力を挿入できます=。
CTRL-R {0-9a-z"%#*+:.-=} i_CTRL-R
Insert the contents of a register. Between typing CTRL-R and
the second character, '"' will be displayed to indicate that
you are expected to enter the name of a register.
…
i_CTRL-R_=
'=' the expression register: you are prompted to
enter an expression (see expression)
式については、system()
関数を使用して外部コマンドを実行できます。
テキストを選択した後、を押しc
、次に式として<c-r>=
使用system('date +%Y%m%d')
します。
date
。system('printf %s foo')
末尾の改行を出力しないのようなものを試すと、違いがあることがわかります。
"=system('date +%Y%m%d')p
代わりにビジュアル選択で使用できます。
カーソルをそのような行に置くと、次のことができます。
0
カーソルを最初の列に置きます。f
Space カーソルを最初の空白に置きます。i
Enter Esc 行を分割します。l
カーソルを1行上に移動します。:.!date +\%Y\%m\%d
コマンドを実行します。J
再びラインに参加します。現在、「:」コマンドは行全体でのみ機能します。行の一部を選択する場合、「:! date」のようなことを行うと行全体が置き換えられます。行の一部だけを置き換えたい場合は、そのマッピングを作成する必要があります。将来のリリースでは、「:」は部分的な行で機能する可能性があります。
詳細についても参照:h visual-operators
してください。
このコメントから:visまたはNrrwRgnプラグインを試すこともできます。どちらも問題なく処理できます。(ヒントを提供してくれた@ christian-brabandtに感謝します)。
そのような置換の一時的なマッピングを作成します。例えば:
:vnoremap qq c<C-R>=system('wc -c | perl -pe chomp', @")<CR><ESC>
次に、ビジュアルモードでテキストを選択して入力qq
すると、コマンド出力に置き換えられます。この例でwc -c
は、選択である@"
パラメータを処理します。perl -pe chomp
出力から末尾の改行を削除するために必要です。
vim8 packpathのインストールvis.vba.gz
と依存関係cecutil.vba.gz
# shell brace expansion (bash >=3.0, zsh>=2.6)
$ mkdir -p ~/.vim/pack/manual/start/{vis,cecutil}
$ vim http://www.drchip.org/astronaut/vim/vbafiles/vis.vba.gz
:UseVimball ~/.vim/pack/manual/start/vis
:e http://www.drchip.org/astronaut/vim/vbafiles/cecutil.vba.gz
:UseVimball ~/.vim/pack/manual/start/cecutil
OPの例は
:'<,'>B !date +\%Y\%m\%d