Як слід перейменувати свій поточний файл у Vim?
Наприклад:
- Я редагую
person.html_erb_spec.rb
- Я хотів би, щоб це перейменовано
person.haml_spec.rb
- Я хотів би продовжувати редагування
person.haml_spec.rb
Як би я міг робити це елегантно?
Як слід перейменувати свій поточний файл у Vim?
Наприклад:
person.html_erb_spec.rb
person.haml_spec.rb
person.haml_spec.rb
Як би я міг робити це елегантно?
Відповіді:
Є невеликий плагін, який дозволить вам це зробити.
Program Files (x86)
. Кожен раз, коли з цим каталогом потрібно працювати, його потрібно загорнути в лапки. Якого, е, багато.
Команда викликається :saveas
, але, на жаль, вона не видалить ваш старий файл, вам доведеться це зробити вручну. див. :help saveas
для отримання додаткової інформації.
Редагувати:
Більшість установок vim мають інтегрований провідник файлів, який ви можете використовувати для таких операцій. Спробуйте :Explore
в командному режимі (я б фактично відобразив це на функціональній клавіші, це дуже зручно). Наприклад, ви можете перейменовувати файли R
або видаляти їх D
. Але натискання <F1>
на дослідник дасть вам кращий огляд.
Якщо ви використовуєте git і вже маєте плагін tpope fugitive.vim, просто:
:Gmove newname
Це буде:
Якщо ваш файл ще не був доданий до git repo, спочатку додайте його:
:Gwrite
:Gmove
потрібен відносний шлях до нового імені файлу. Гарний спосіб зробити це - ввести :Gmove <ctrl-r>%
який додає поточний шлях / ім'я файлу.
Я роблю це з плагіном NERDTree:
:NERDTreeFind
потім натисніть m
Для перейменування ви можете вибрати (m)ove the current node
та змінити ім'я файлу. Також є такі варіанти, як видалення, копіювання, переміщення тощо ...
:w newname
- для створення копії.:e#
.:!rm oldname
.У Windows необов'язковий 3-й крок трохи змінює:
:!del oldname
.:f newname
2) зберегти його :w
3) (необов'язково) !rm oldname
. Перевага полягає в тому, що ваша історія скасування збережена.
:saveas
в цьому плані краще, @rampion - і робить те, що написав @kynan.
Якщо файл уже збережено:
:!mv {file location} {new file location}
:e {new file location}
Приклад:
:!mv src/test/scala/myFile.scala src/test/scala/myNewFile.scala
:e src/test/scala/myNewFile.scala
Вимоги дозволу:
:!sudo mv src/test/scala/myFile.scala src/test/scala/myNewFile.scala
Зберегти як:
:!mv {file location} {save_as file location}
:w
:e {save_as file location}
Для Windows не підтверджено
:!move {file location} {new file location}
:e {new file location}
Я б рекомендував :Rename
від євнуха тпопи для цього .
Він також включає купу інших зручних команд.
Команда «Перейменувати» визначається таким чином, як у ній (перевірте репо на наявність оновлень!):
command! -bar -nargs=1 -bang -complete=file Rename :
\ let s:file = expand('%:p') |
\ setlocal modified |
\ keepalt saveas<bang> <args> |
\ if s:file !=# expand('%:p') |
\ call delete(s:file) |
\ endif |
\ unlet s:file
:sav new_name
:!rm <C-R># // or !del <C-R># for windows
control+ R, #миттєво розгорнеться до альтернативного файлу (раніше відредагований шлях у поточному вікні) перед натисканням Enter. Це дозволяє нам переглянути, що саме ми збираємося видалити. Використання труби |
в такому випадку не є безпечним, тому що якщо sav
вийде з ладу з будь-якої причини, #
все одно вкаже на інше місце (або ні на що). Це означає !rm #
або delete(expand(#))
може видалити зовсім інший файл! Тому робіть це вручну обережно або використовуйте хороший сценарій (вони згадуються у багатьох відповідях тут).
... або спробуйте створити функцію / команду / сценарій самостійно. Почати з чого просто, як:
command! -nargs=1 Rename saveas <args> | call delete(expand('#')) | bd #
після перезавантаження vimrc просто введіть :Rename new_filename
. У чому проблема з цією командою?
Тест безпеки 1: Що робити :Rename
без аргументів?
Так, він видаляє файл, прихований у "#"!
Рішення: ви можете використовувати напр. умови або try
заява на зразок цього:
command! -nargs=1 Rename try | saveas <args> | call delete(expand('#')) | bd # | endtry
Тест безпеки 1:
:Rename
(без аргументу) призведе до помилки:
E471: аргумент необхідний
Тест безпеки 2: Що робити, якщо ім’я буде таким самим, як попереднє?
Тест безпеки 3: Що робити, якщо файл знаходитиметься в іншому місці, ніж ваше фактичне?
Виправте це самостійно. Для читабельності ви можете написати це таким чином:
function! s:localscript_name(name):
try
execute 'saveas ' . a:name
...
endtry
endfunction
command! -nargs=1 Rename call s:localscript_name(<f-args>)
примітки
!rm #
краще ніж !rm old_name
-> вам не потрібно запам’ятовувати стару назву
!rm <C-R>#
краще, ніж !rm #
коли це робити вручну -> ви побачите, що ви фактично видаляєте (причина безпеки)
!rm
як правило, не дуже безпечно ... mv
краще місце для сміття
call delete(expand('#'))
краще, ніж команда оболонки (ОС агностик), але довше набирати та неможливо використовувати control+R
try | code1 | code2 | tryend
-> коли виникає помилка під час code1, не запускайте code2
:sav
(або :saveas
) еквівалентно :f new_name | w
- див. file_f - і зберігає історію скасування
expand('%:p')
дає весь шлях вашого місцезнаходження ( %
) або розташування альтернативного файлу ( #
)
sav person.haml_spec.rb | call delete(expand('#'))
call delete(expand('#'))
Існує функція в .vimrc Гаррі Бернхардта, яка справляється з цим.
function! RenameFile()
let old_name = expand('%')
let new_name = input('New file name: ', expand('%'), 'file')
if new_name != '' && new_name != old_name
exec ':saveas ' . new_name
exec ':silent !rm ' . old_name
redraw!
endif
endfunction
map <leader>n :call RenameFile()<cr>
:!mv % %:h/new_name
Реєстр %
містить ім'я поточного файлу. '%:h'
показує каталог 'head', що містить поточний файл, наприклад: %:h
повертається, /abc/def
коли повний шлях вашого файлуabc/dev/my.txt
Як щодо цього (покращене пропозицією Джейка):
:exe "!mv % newfilename" | e newfilename
:exe "!mv % newfilename" | e newfilename
Vim має rename
функцію, але, на жаль, він не зберігає історію.
Найпростіший агностичний спосіб перейменувати файл без втрати історії:
:saveas new_file_name
:call delete(expand('#:p'))
expand('#:p')
повертає повний шлях до старого файлу.
Використовуйте :bd #
якщо ви також хочете видалити старіший файл із списку буферів.
Якщо ви хочете скористатися швидкою командою для перейменування файлу, додайте новий файл у ~ / .vim / plugin із таким вмістом:
function! s:rename_file(new_file_path)
execute 'saveas ' . a:new_file_path
call delete(expand('#:p'))
bd #
endfunction
command! -nargs=1 -complete=file Rename call <SID>rename_file(<f-args>)
Команда Rename
допоможе швидко перейменувати файл.
Там є гарний більше плагін називається ВІМ-євнух Тімом Папою , який включає в себе функцію перейменування, а також деякі інші ласощі (видалити, знайти, зберегти все, CHMOD, Судо редагувати, ...).
Щоб перейменувати файл у vim-eunuch:
:Move filename.ext
Порівняно з rename.vim:
:rename[!] filename.ext
Економить кілька натискань клавіш :)
Для перейменування існуючого файлу без використання плагінів слід використовувати команду
:Explore
Ця команда дозволяє досліджувати файли у.directory, видаляти або перейменувати їх. ніж вам слід перейти до потрібного файлу в Explorer, ніж R
команда type, яка дозволить вам перейменувати ім'я файлу
Я не знаю, чи це "найпростіший" метод, але якщо припустити, що ви вже зберегли свій файл (: w), я б викликав оболонку (: sh) і зробив простий cp foo foo.bak, щоб повернутися до редактора використовувати Ctrl-D / Exit. Корисний список команд редактора vi на цьому посиланні
Цей маленький сценарій не є ідеальним (додаткове повернення перевезення, яке потрібно натиснути), але це зроблено.
function Rename()
let new_file_name = input('New filename: ')
let full_path_current_file = expand("%:p")
let new_full_path = expand("%:p:h")."/".new_file_name
bd
execute "!mv ".full_path_current_file." ".new_full_path
execute "e ".new_full_path
endfunction
command! Rename :call Rename()
nmap RN :Rename<CR>