Vimのカーソルの下にファイルを作成する


10

ファイルのリストがあります

file1.ext
file2.ext
...

カーソルがfile2.ext内にある場合、file2.extという名前のファイルを作成するにはどうすればよいですか。gf新しいファイルを作成するだけのようなものです(これは架空の状況であり、いつか役立つかもしれないと考えられています)。

回答:


17

最初に頭に浮かぶのはtouch、カーソルの下にファイル名を渡すコマンドを使用することです。

:map <silent> <leader>cf :!touch <c-r><c-p><cr><cr>

しかし、プラットフォーム間で移植可能な純粋なVimソリューションがあります。組み込み関数writefileは、リストをファイルに1行ずつ書き込みます。当然、入力リストが空の場合、空のファイルが作成されます。(詳細:help writefileについては、を参照してください。)この副作用を利用できます。

:map <silent> <leader>cf :call writefile([], expand("<cfile>"), "t")<cr>

ファイル名の抽出は、別のexpandパターンを使用して調整できることに注意してください(を参照:help expand())。

ちなみに、ファイルを作成せずに、編集のために開くだけの場合は、のgfようなマッピングを定義できます。

:map <leader>gf :e <cfile><cr>

ここで、:eコマンドは:tabeまたは同様のコマンドに置き換えることができます。


1
<cfile>代わりに教えるための+1<C-r><C-f>
sehe

2

私は上記のibによる優れた答えを次のように拡張しました。私の目標は、vim(この場合はGollum wiki)の必要に応じてvimを使用して新しいマークダウンファイルを作成することでした

私が最初に試しました:

map <silent> <leader>cf :call writefile([], expand("<cfile>"), "t")<cr>` 

上記は答えで述べたように機能します。しかし、最初はvimでファイルが開いているのを実際に確認できなかったため、機能していないと思いました。以下のコードの2番目のビットを使用すると、新しいファイルが開きます-これは私が探していたものです。だから私はそれらを組み合わせて試しました:

map <leader>cf :e <cfile><cr>

しかし、wiki構文のような構文を使用してwikiに新しいファイルを作成しようとする[[the-new-file]]と、括弧内のファイルの拡張子が許可されないため、これはwikiでは機能しません。しかし、Vimはこれを機能させるために新しいファイルを作成するときに拡張子を知る必要があります。この場合、私は使用しました:

    map <leader>cf :e <cfile>.md<cr>

新しいマークダウンファイルを作成できました。これをさらにカスタマイズする方法はありますが(たとえば、拡張機能をハードコーディングしないことにより)、上記は私のニーズにうまく機能します。別の拡張子が必要な場合(たとえば、.wikiファイルを保存するため)、おそらく単純なルートをたどって、次のような別のマップを作成します。

    map <leader>cwf :e <cfile>.wiki<cr>

副次的な利点として、同じコマンドを使用して既存のマークダウンファイルを開くことができます(gfファイル拡張子がないため、標準のコマンドはここでは機能しません)。


gf動作しますset suffixesadd=.wiki。少なくとも1つのアイテムしか含まれていない場合、の改良バージョンはcfを尊重するバージョンになりますsuffixesadd
hjdivad 2013年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.