2012-06-04 23 views
13

Czy istnieje sposób na przeniesienie pliku w Vim? Na przykład. Otworzyłem plik foo/bar.txt w Vimie. Znam 2 sposoby, aby przenieść ten plikPrzenoszenie pliku w Vim

Pierwsze rozwiązanie:

  1. Usuń bufor z :bd bar.txt
  2. wykonać ruch na powłoce z mv foo/bar.txt foo/bar2.txt
  3. załadować plik w vim z :e foo/bar2.txt

Drugie rozwiązanie:

  1. Zamknij Vima, a więc cały bufor, gdy jest zamknięty.
  2. Wykonaj ruch na powłoce ...
  3. Uruchom Vima i załaduj plik.

Ale te dwa rozwiązania są kłopotliwe. Wiem, istnieje wtyczka do zmiany nazw plików vim-enuch, ale czy nie istnieje sposób Vima do wykonywania takich podstawowych funkcji?

Odpowiedz

6

Nie sposób atomowy przenieść plik takiego, ale to powinno być w pobliżu:

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>') 

Teraz można powiedzieć:

:MoveFile file2.txt 

Aby zmienić nazwę na file2.txt

:MoveFile %.0 

do przenoszenia pliku file2.txt do pliku2.txt.0

+1

To rozwiązanie jest lepsze, ponieważ mogę dodać to wiersze 5 do mojego vimrc zamiast ładowania wtyczki wagi ciężkiej. – SvenK

+0

Właśnie zaktualizowałem to po kilku testach. – sehe

+0

Problemy z wydostawaniem nazw plików są zignorowane w dostarczonej implementacji. Aby to naprawić w tym względzie, należy zmienić dwa ostatnie wiersze funkcji w następujący sposób. Po pierwsze, 'exe 'sav' fnameescape (a: newspec)'; drugi, 'call delete (stary)'. Należy również sprawdzić wartość zwracaną przez funkcję 'delete()', aby poinformować użytkownika o niepowodzeniu usuwania pliku (łatwość złapania tej sytuacji jest kolejną zaletą funkcji w porównaniu z '! Rm', oprócz jego). –

3

jeśli jesteś w buforze bar.txt:

:w bar2.txt 
:!rm bar.txt 

Jeśli bar2.txt istnieje już w bieżącym katalogu, użyj :w!.

+2

Ale '! Rm bar.txt' nie zamyka otwartego bufora – SvenK

+1

, to prawda, zmień': sav' na ': w' – pb2q

+1

Bufor dla' bar.txt' nadal będzie otwarty. Można go zamknąć za pomocą 'bd '. –

24

Można również użyć funkcji zmiany nazwy netrw (domyślny eksplorator plików).

  1. Otwarte netrw z :E
  2. Przesuń kursor do linii z pliku, który zamierzasz zmienić, w tym przypadku bar.txt. Przechodzisz do danego pliku, używając h, j, k, l lub możesz wyszukać go pod numerem / (np. /bar.txt)
  3. Hit R. Zostaniesz poproszony o nową ścieżkę do pliku. Po zakończeniu wprowadzając filepath hit <CR>
  4. Przesuń kursor do nowego pliku i otwórz go <CR>

Choć rozwiązanie to może nie być tak szybkie jak przy użyciu vim-eunch, to nie można zobaczyć w ramach projektu struktura podczas zmiany nazwy pliku. Pozwoli to również na przenoszenie wielu plików naraz.

Dla dalszego czytania metę :help netrw-move

+1

Można również otworzyć eksplorator plików z (': Sex' lub': Vex'), jeśli ma się: E polecenie zmienione na coś. – installero

Powiązane problemy