23

Vim内でファイルを移動する方法はありますか? たとえば、Vim でファイル foo/bar.txt を開きました。このファイルを移動する 2 つの方法を知っています。

最初の解決策:

  1. でバッファを削除します:bd bar.txt
  2. シェルで移動を実行しますmv foo/bar.txt foo/bar2.txt
  3. でvimにファイルをロードします:e foo/bar2.txt

2番目の解決策:

  1. Vim を閉じて、すべてのバッファを閉じます。
  2. シェルで移動を実行...
  3. Vim を起動してファイルを読み込みます。

しかし、これら 2 つの解決策は厄介です。ファイルの名前を変更するためのプラグインvim-enuchがあることは知っていますが、そのような基本的な機能を実行するための Vim の方法はありませんか?

4

3 に答える 3

43

また、netrw(デフォルトのファイルエクスプローラー)の名前変更機能を使用することもできます。

  1. でnetrwを開く:E
  2. 名前を変更するファイル(この場合はbar.txt)の行にカーソルを移動します。/h、j、k、lを使用して問題のファイルに移動するか、 (例/bar.txt)を使用してファイルを検索できます。
  3. ヒットR。次に、新しいファイルパスの入力を求められます。ファイルパスヒットの入力が完了すると<CR>
  4. カーソルを新しいファイルに移動し、で開きます<CR>

このソリューションはvim-eunchを使用するほど速くはないかもしれませんが、ファイルの名前を変更するときにプロジェクトの構造を確認することができます。これにより、一度に複数のファイルを移動することもできます。

さらに読むために実行:help netrw-move

于 2012-11-21T17:32:07.020 に答える
8

そのようなファイルを移動するアトミックな方法はありませんが、これは近いはずです:

function! MoveFile(newspec)
     let old = expand('%')
     " could be improved:
     if (old == a:newspec)
         return 0
     endif
     exe 'sav' fnameescape(a:newspec)
     call delete(old)
endfunction

command! -nargs=1 -complete=file -bar MoveFile call MoveFile('<args>')

今、あなたは言うことができます:

:MoveFile file2.txt

file2.txtに名前を変更するには

:MoveFile %.0

file2.txtをfile2.txt.0に移動します

于 2012-06-04T16:17:59.417 に答える
5

bar.txt バッファにいる場合:

:w bar2.txt
:!rm bar.txt

現在のディレクトリにbar2.txtが既に存在する場合は、 :w!.

于 2012-06-04T16:23:13.563 に答える