Vimにタイムスタンプを挿入する最良の方法?


90

EditPad Liteには、タイムスタンプ(例: "2008-09-11 10:34:53"をコードに挿入する機能(CTRL- ECTRL- I)が備わっています。

Vimでこの機能を使用するための最良の方法は何ですか?

(私はSSHを介してLinuxサーバーでVim 6.1を使用しています。現在の状況では、多くの人がログインを共有しているため、タイムスタンプを取得する別の組み込みの方法がある場合、ホームディレクトリに略語を作成したくありません。 )

回答:


87

http://kenno.wordpress.com/2006/08/03/vim-tip-insert-time-stamp/

それを試してみました、それは私のマックで動作します:

:r! date

生成する:

Thu Sep 11 10:47:30 CEST 2008

この:

:r! date "+\%Y-\%m-\%d \%H:\%M:\%S"

生成する:

2008-09-11 10:50:56

1
ちょっとしたメモですが、スペースは必要ないようです-":r!date"も機能します。
ジョンブリングハースト

@AB、この質問をざっと見てください:stackoverflow.com/questions/15394572/…、バックスラッシュでエスケープできるようです。試して頂けますか?
ダレン・トーマス

3
完全に動作します。それを書く他の方法は:r!date "+\%F \%T"または:r!date +\%F\ \%Tです。
chrisfargen 2013年

私のvimrcにこれを入れてみました...それから、私がすでに何年も前にそこに入れていることに気づきました。よく働く。
mgjk

私のfedora 31の魅力のように動作します。ありがとうございます。
rchrd

114

クロスプラットフォームで機能させるには、次のコードをに追加しますvimrc

nmap <F3> i<C-R>=strftime("%Y-%m-%d %a %I:%M %p")<CR><Esc>
imap <F3> <C-R>=strftime("%Y-%m-%d %a %I:%M %p")<CR>

これで、Vi / Vim内でいつでもF3キーを押すだけ2016-01-25 Mo 12:44で、カーソルの位置に挿入されたようなタイムスタンプが表示されます。

使用可能なパラメーターの詳細については、C関数strftime()のドキュメントを確認してください。


このシステム全体(Linux)を行う方法はありますか?
nilon

このタイムスタンプをファイル名として使用してファイルを作成または保存する方法はありますか?
nilon

F3はすでに別の目的で使用されているため、ありがとうございます。:Date次のコードを~/.vimrc構成ファイルに追加して、通常モードでカスタムコマンドを定義しましたcommand! Date put =strftime('%Y-%m-%d')。新しい行に日付を挿入します。改行なしのバージョンを作成できませんでした。
ポールルージュ

13

なぜみんなが使っているの:r!?空白行を見つけて、!!dateコマンドモードから入力します。キーストロークを保存してください!

[nbこれは、現在の行をstdinにパイプし、その行をコマンド出力に置き換えます。したがって、「空白行を見つける」部分です。]


9

@Swaroop CHの回答の拡張として、

^R=strftime("%FT%T%z")

タイムゾーンも印刷するよりコンパクトなフォームです(実際には、ISO-8601準拠のフォームではUTCとの違いです)。

何らかの理由で外部ツールを使用したい場合は、

:r !date --rfc-3339=s

RFC-3339に完全に準拠したタイムスタンプを提供します。使用するns代わりにsを通じてスポックのような精度のために、パイプtr ' ' Tの代わりに、日付と時刻の間の空間の資本Tを使用します。

また、あなたはそれを知っていると便利かもしれません

:source somefile.vim

からコマンドを読み取りますsomefile.vim。この方法で、マッピングのカスタムセットなどをセットアップし、そのアカウントでvimを使用しているときにそれをロードできます。


strftime()はvim内の関数です。次も使用できます:put=strftime(""%FT%T%z")
Antonios Hadjigeorgalis

私のマシン(Windows 7、gvim 8.0.69)では、%Fおよび%T指定子は機能しませんでしたが、%Y-%m-%dおよび%H:%M:%Sは機能しました。(cplusplus.com/reference/ctime/strftimeによると、%Fと%TにはC99のstrftimeの更新バージョンが付属しています。)また、%z指定子はタイムゾーンの詳細な説明を生成しました。
Ed Wynn

8

:r!日付

次に、完全に同じ形式が必要な場合は、日付コマンド(man date)に形式を追加し、これをvimエイリアスとして追加することもできます。

:r!日付+ "\%Y-\%m-\%d \%H:\%M:\%S"

これにより、例で示した形式が生成されます(シェルの日付は\%ではなく%を使用します。vimは%を現在のファイルの名前で置き換えるため、エスケープする必要があります)。

たとえば、.vimrcにマップを追加して、F3キーを押すたびにコマンドを自動的に配置できます。

:map <F3> :r! date +"\%Y-\%m-\%d \%H:\%M:\%S"<cr>

(上記の編集:))(編集:テキスト部分をコードに変更して、

<F3> 

表示可能)


4

UNIXタイムスタンプの場合:

:r!日付+ \%s

このコマンドを頻繁に使用する場合は、VIMのキー(たとえばF12)にマップすることもできます。

これを.vimrcに入れてください:


map  <F12> :r! date +\%s<cr>

4

Vim Wikiaから。

Fキーを押すために手を動かす必要はなく、これを使用します。

:iab <expr> tds strftime("%F %b %T")

挿入モードでは、tdsと入力するだけで、スペースバーを押すか戻るとすぐに、日付を取得して入力を続けます。

%bは月の名前を見るのが好きなので、そこに入れました。%F私に日付でソートするために何かを与えます。%Y%m%dユニット間にキャラクターがいないように変更するかもしれません。




0

:Date現在のカーソル位置に日付を挿入するための(キーマッピングではなく)カスタムコマンドが必要でした。

残念ながら、次のような単純なコマンドr!dateは、新しい行になります。だから最後に私は次のことを思いつきました:

command Date execute "normal i<C-R>=strftime('%F %T')<CR><ESC>"

新しい行を追加せずに、カーソル位置に日付/時刻文字列をnormal a追加します(カーソル位置の後に追加するように変更)。


これが機能している間、コマンドは非常に複雑に見え、これを行うためのより良い方法があるはずだと感じています。知っている人がいたら教えてください:)
luator
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.