වත්මන් ගොනුව නැවත පූරණය කරන්නේ කෙසේද?


193

බොහෝ විට මම අනුවාද පාලනය කරන ලිපිගොනු සමඟ වැඩ කරමින් සිටිමි, එබැවින් Vim වලින් පිටත ඒවාට වෙනස්කම් කළ හැකිය.

Vim වසා දමා නැවත විවෘත නොකර ගොනුව නැවත පූරණය කිරීමට ඉක්මන් ක්‍රමයක් කුමක්ද? මෙය ස්වයංක්‍රීයව කිරීමට ක්‍රමයක් තිබේද?


" Compare buffer with saved version nnoremap gd :DiffSaved<CR>
ටොම් හේල්

ඔබ vim-faq ස්ථාපනය කර ඇත්නම් , ඔබට එහි නොබැඳි පිළිතුරක් ලබා ගත හැකිය: :h vim-faqසහ සෙවීම /reload. ටැගය කටපාඩම් කිරීම දුෂ්කර ය :h faq-5.8.
හොට්ෂ්කේ

Answers:


231

ඔබට අවශ්‍ය විධානය :e(කෙටි සඳහා :edit). ඔබ :edit!එය භාවිතා කරන්නේ නම් එය දේශීය වෙනස්කම් ඉවත දමා නැවත පූරණය වේ.

set autoreadඔබේ vimrc තුළ ස්වයංක්‍රීයව මෙය කළ හැකිය.


5
අවවාද සහ විසඳුම් සඳහා මෙම පිළිතුර බලන්න autoread.
ටොම් හේල්

4
සියලුම බෆර සඳහා මෙය කිරීමට, භාවිතා කරන්න :bufdo :eහෝ:bufdo :e!
ආරොන් එච්.

1
A ආරොන් එච්. ඒ සඳහා ඔබට ස්තූතියි! මට සාමාන්‍යයෙන් වරකට බෆර සිය ගණනක් විවෘතව ඇති අතර ශාඛා මාරු කරන විට, මම සාමාන්‍යයෙන් වයිම් වසා දමා නව අන්තර්ගතයන් සහිත සියලු බෆරයන් නැවුම් කිරීමට නැවත ආරම්භ කරමි. මෙය ප්‍රධාන කාලරාමුවක් වනු ඇත!
g19fanatic

1
A ආරොන් එච්. දෙවැන්න :අත්‍යවශ්‍ය නොවේ: :bufdo eඑකම ලෙස ක්‍රියා කරයි.
JoL

nnoremap <leader>w :write \| sleep 1000m \| :checktime<CR>1s යනු ගොනුව මත ක්‍රියාත්මක වීමට ලින්ටින් මෙවලම විසින් ගත කරන කාලයයි. ඔබ සුපුරුදු <leader> භාවිතා කරන්නේ නම් \w, ක්‍රියාව ක්‍රියාත්මක කිරීමට ටයිප් කරන්න.
rodvlopes

23

බොහෝ අවස්ථාවලදී, මෙම පිළිතුර පැහැදිලි කරන පරිදි set autoreadක්‍රියා නොකරනු ඇත :

ඔබ බාහිර විධානය ක්‍රියාත්මක කිරීම වැනි දෙයක් නොකරන්නේ නම් Autoread ගොනුව නැවත පූරණය නොකරයි (වැනි !lsහෝ වෙනත් !sh)

නාභිගත සිදුවීම් අවුලුවනු ඇත autoread, නමුත් මේවා භාවිතා නොකරන්නේ නම් ඒවා අල්ලා නොගනී gvim. එබැවින්, vimටර්මිනල් කවුළුවක් හෝ ටීඑම්එක්ස් තුළ සරලව ධාවනය වන්නේ නම් , ප්ලගිනය vim-tmux-focus-events ස්ථාපනය කරන්න .

Tmux අනුවාද>> 1.9 හි, ඔබට එකතු කිරීමට අවශ්‍ය වන්නේ .tmux.conf:

set -g focus-events on

අමතර යහපත්කම, ඔබේ පහත සඳහන් එකතු vimrcකැමැත්ත කොකා autoreadඅතර ඇතුළත අවරෝධක වෙනස් කරන අවස්ථාවේදී ඇතුළත විම්:

au FocusGained,BufEnter * :checktime

මෙය වසර ගණනාවක් තිස්සේ මට කරදරයක් විය. පරිපූර්ණ විසඳුමකට ස්තූතියි! 💯😄
නේතන් ලෝන්ග්

10

වත්මන් බෆරය වෙනස් කරන Vim වෙතින් ඔබ කවදා හෝ බාහිර විධානයක් ක්‍රියාත්මක කර ඇත්නම්, තැටියේ වෙනස්කම් සිදු කර ඇති බැවින් ගොනුව නැවත පූරණය කිරීමට එය ඔබෙන් ඉල්ලා සිටින බව ඔබ දැක ඇති. :checktimeවිධානය භාවිතා කර ඔබට සැබවින්ම මෙම විමසුමට යා හැකිය .


4

වැඩිදියුණු කිරීමට හොඳ ප්ලගිනයක් autoread https://github.com/djoshea/vim-autoread

තැටියේ ලියා ඇති නමුත් බෆරයේ වෙනස් නොකරන ලද ලිපිගොනු ස්වයංක්‍රීයව vim වෙතින් නැවත පූරණය කිරීමට ස්වයංක්‍රීයව හේතු වේ. මෙමඟින් වෙනත් යෙදුමක් භාවිතයෙන් සංස්කරණය කර සුරැකීමට හැකි වේ. Vim වෙත නැවත පැමිණි පසු, ඔබ අවසන් වෙනස් කිරීමෙන් පසු ගොනුව වෙනස් කර නොමැති තාක් කල්, තැටියෙහි සිදු කරන ලද වෙනස්කම් පිළිබිඹු වන පරිදි ගොනුව ස්වයංක්‍රීයව යාවත්කාලීන වනු ඇත.


0

ගොනුවක අන්තර්ගතය බැලීම, ගොනුව බාහිරව යාවත්කාලීන කිරීම, වෙනස් කළ ගොනුව ප්‍රදර්ශනය කිරීම සහ අවශ්‍ය විටෙක එය සංස්කරණය කිරීමේ අවස්ථාව මට තිබුණි. මෙම පිළිතුරෙන් දේවානුභාවයෙන් මම එය Vim සේවාදායකය / දුරස්ථ විධාන රේඛා විකල්ප සමඟ විසඳා ගතිමි .


පහත දැක්වෙන විධානයන් සමඟ බාහිර විධානයක් හරහා ගොනුවක් නැවත පූරණය කළ හැකිය. පළමුව, සේවාදායක නිදසුනක් ආරම්භ කරන අතරතුර, Vim සමඟ ඇති ගොනුව විවෘත කරන්න.

vim --servername JABBERWOCKY /tmp/alice.log

ගොනුව බාහිරව වෙනස් කර ඇති බව උපකල්පනය කරමු, උදා echo "Curiouser and curiouser" >> /tmp/alice.log. අවශ්‍ය වූ විට, ගොනුව නැවත පූරණය කිරීම සඳහා සේවාදායකයට විධානයක් යවන්න. මෙම විධානය ඉක්මණින් අවසන් වන අතර නව සංස්කාරකයක් බිහි නොවේ.

vim --servername JABBERWOCKY --remote-send ":e<CR>"

විවෘත කරන ලද ගොනුව Vim හා බාහිරව වෙනස් කර ඇත්නම්, නැවත පූරණය කිරීමේදී ගැටුමක් ඇති වේ (අනතුරු ඇඟවීමේ පණිවිඩයක් දිස්වනු ඇත). එවැනි අවස්ථාවකදී තීරණයක් ගත යුතුය: එය අතහැර Vim හි වෙනස්කම් තබා ගන්න, නැතහොත් දේශීය වෙනස්කම් ඉවත දමා නැවත පූරණය කිරීමට බල කරන්න .


--remote-sendඉහත සඳහන් විධානයට අතින් නැවත පූරණය කිරීම අවශ්‍ය වේ. කෙසේ වෙතත්, එම විධානය සරල ලූපයකට බැඳ තැබිය හැකිය , බාෂ්ගේ for/ whileභාවිතා කරමින් හෝ ලිනක්ස් / යුනික්ස් හි හැක් ලයිනර් භාවිතා කරමින්:

watch -n 1 'vim --servername JABBERWOCKY --remote-send ":e<CR>"'

පරීක්‍ෂා නොකළද, පවර්ෂෙල් හි ද මෙවැනි දෙයක් අවබෝධ කර ගත හැකි බව මට විශ්වාසයි.

ලිනක්ස් / යුනික්ස් හි සිදුවීම් පද්ධති ප්‍රවේශයක් සාක්ෂාත් කරගත හැකිය. උදා: inotify පුස්තකාලය භාවිතා කරමින් ගොනු පද්ධති සිදුවීම් වලට සවන්දීමෙන් ඔබ පිස්සු ගොනු පද්ධති භාවිතා නොකරන්නේ නම්. පුද්ගලිකව මම මෙවලම භාවිතා වැනි entr ප්රධාන Linux බෙදාහැරීම් ඇතුළත් කර ඇති බව පෙනේ ඇති අතර, එය ගොඩක්. එවිට මට ලැබෙන්නේ:

echo /tmp/alice.log | entr vim --servername JABBERWOCKY --remote-send ":e<CR>"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.