たとえば、:echo strftime(%c)
現在の時刻が下部に表示されますが、この時刻文字列をテキスト(カーソルの直後)にどのように挿入できますか?
答え1
:r!date +\%c
バラより:help :r!
これはvimコマンドではなく外部コマンド(シェル内で実行されます)に対するものです。
答え2
あなたはそれを使用することができます式レジスタ"=
,,そしてp
(またはP
)ノーマルモードまたは<C-R>
挿入モードで:
通常モードでは:(
ここでは+を<C-M>
意味するか、/を直接押します)ControlMEnterReturn
"=strftime('%c')<C-M>p
挿入モードでは:(
上記と同じ<C-M>
、+を<C-R>
意味)ControlR
<C-R>=strftime('%c')<C-M>
同じ式の結果を複数回挿入するには、次のキーにマッピングする必要があります.vimrc
。
<C-M>
<C-R>
:nmap <F2> "=strftime('%c')<C-M>p
:imap <F2> <C-R>=strftime('%c')<C-M>
答え3
vimの出力を挿入したい場合注文する(シェルのstdoutのように、代わりに関数呼び出しの戻り値または表現する)、キャプチャする必要があります。これは:redir
、変数、ファイル、レジスタ、またはその他のターゲットに対応するvimの標準出力をリダイレクトできるコマンドを使用して行われます。
:redir
使用が少し不便です。より便利な方法で機能をカプセル化する関数を作成します。
funct! Exec(command)
redir =>output
silent exec a:command
redir END
return output
endfunct!
これらの関数が宣言されたら、式レジスタ(Chris Johnsenの説明に従って)を使用して、コマンドの出力をカーソル位置に挿入できます。したがって、通常モードでは、クリックして:put =Exec('ls')
vimの現在のバッファのリストを挿入します。
コマンドは関数の名前空間で実行されるため、グローバル変数を使用する場合は前に付ける必要がありますg:
。また、Exec()
上記のように、1行の出力にも終了行の改行が追加されます。substitute()
これを防ぐために、関数呼び出しを追加する必要があるかもしれません。
また見てくださいhttps://stackoverflow.com/questions/2573021/vim-how-to-redirect-ex-command-output-into-current-buffer-or-file/2573054#2573054関連コマンドの詳細redir
とリンクを確認してください。
答え4
:call append(line('.'), strftime("%c"))
次の行に置いてJ
(Shift+ J)を押すと、現在の位置にリンクします。
または、1つのコマンドですべての操作を実行する必要がある場合は、次のことを実行できます。
:call setline(line('.'), getline(line('.')) . strftime("%c"))
または
:call setline(line('.'), getline(line('.')) . " " . strftime("%c"))
日付の前にスペースを挿入するかどうかによって異なります。