vi (m) හි විවෘත කරන ලද ගොනුවේ වෙනස් කළ අන්තර්ගතය නැවුම් කරන්න


380

මා සතුව වින්‍යාස ගොනුවක් මා සතුව විවෘතව තබා ඇත, නමුත් සමහර විට එය තැටියේ වෙනස් වේ, මෙම වෙනස්කම් පර්යන්තයේ පිළිබිඹු නොවී. ගොනුව වසා දමා නැවත විවෘත නොකර තිරයේ අන්තර්ගතය නැවුම් කළ හැකිද? එසේ නම්, කෙසේද?



එතීම: මේ දක්වා ඇති සියලුම පිළිතුරු "තල්ලු" විලාසිතාව වෙනුවට "ඡන්දය" ය. එනම්, වෙනත් මෘදුකාංගවල සමාන අංගයන්ගෙන් සිදු වූවාක් මෙන් බාහිර ලිපිගොනු වෙනස් කිරීමේ සිදුවීමක් ලැබීම වෙනුවට, මෙම පිළිතුරු රඳා පවතින්නේ පරිශීලක ක්‍රියාවකින් හෝ ටයිමරයකින් අතින් හෝ අවුලුවන ලද ගොනු වෙනස් කිරීම සක්‍රීයව ඡන්දය ප්‍රකාශ කිරීම මත ය. අවසාන ප්‍රති result ලය වනුයේ තිරයේ ප්‍රබෝධයක් ක්ෂණිකව ඔබට නොපෙනේ.
පෙන්ගේ ජෙන්

ක්‍රියාකාරී විසඳුම stackoverflow.com/a/53860166/4814774
daGo

Answers:


485

:editවත්මන් ගොනුව නැවත පූරණය කිරීම සඳහා ඔබට ගොනුවේ නමක් සඳහන් නොකර විධානය භාවිතා කළ හැකිය . ඔබ ගොනුවේ වෙනස් කිරීම් සිදු කර ඇත්නම් :edit!, වත්මන් ගොනුව නැවත පූරණය කිරීමට බල කිරීමට ඔබට භාවිතා කළ හැකිය (ඔබගේ වෙනස් කිරීම් ඔබට අහිමි වනු ඇත).

විධානය :editකෙටියෙන් දැක්විය හැක :e. බල-සංස්කරණය මේ අනුව කළ හැකිය:e!


2
එම "!" මාව තල්ලු කළා, නමුත් දැන් ඒක පැහැදිලියි.
twan163

108
සටහන: එය සාමාන්‍යයෙන් කෙටියෙන් :e!.
ස්ටෙෆාන් චසෙලාස්

32
@StephaneChazelas: ඔව්, ඒක හරි :) @ twan163: වෙනුවට :editසහ :edit!ඔබ භාවිතා කළ හැකිය :eසහ :e!පිළිවෙළින්.
තුෂි

13
වෙනස් කිරීම් නැති කරන්න, ඔව් සහ නැත. uතීරණාත්මක ලෙස , ඔබට තවමත් එය කළ හැකිය :e!.
gerrit

6
එසේම, ඔබගේ සියලු බෆරයන් නැවත පූරණය කිරීමට අවශ්‍ය නම්, ධාවනය කරන්න::bufdo e
pkout

197

ගොනුව අතින් නැවුම් කිරීමට අමතරව :edit, ඔබට ඔබේ දෑතට දැමිය හැකිය~/.vimrc

:set autoread

Vim විසින් සංස්කරණය නොකළ ඕනෑම ලිපිගොනු ස්වයංක්‍රීයව නැවුම් කිරීමට. එසේම බලන්න :checktime.


2
ගැනුම්කරු පරෙස්සම් වන්න - ඔබ නැවුම් කේතයක් මත වැඩ කරන්නේ නම් සහ git pullනොදැනුවත්වම තිරයේ ඔබගේ සුරකින ලද වෙනස්කම් ඔබට අහිමි විය හැකිය.
azatar

5
ostoszter නැත, Vim විසින් වෙනස් කරනු ලබන්නේ වෙනස් නොවන බෆර් පමණි . වෙනස්වීම් වලදී, තවමත් විමසුමක් ඇත: තබා ගන්න, නැතහොත් පටවන්න?
ඉන්ගෝ කර්කට්

10
NB autoread හරියටම ස්වයංක්‍රීයව ක්‍රියා නොකරයි . ඔබට එක්කෝ gvimබාහිර විධාන භාවිතා කිරීමට හෝ ක්‍රියාත්මක කිරීමට සිදුවේ .
ස්පාර්හෝක්

3
Tmux ඇතුළත vim භාවිතා කරන අයට github.com/tmux-plugins/vim-tmux-focus-events භාවිතා කිරීමෙන් අවධානය යොමු කළ හැකිය . ඔබ කෙසේ හෝ ඇමතුමක් ලබා නොගතහොත් ස්වයංක්‍රීයව ටර්මිනලයට උදව් නොවනු ඇත:checktime
කාල් බාර්ටෙල්

3
autoreadකර්සරය චලනය වීම නැවැත්වීමෙන් තත්පර X කට පසු ස්වයංක්‍රීයව ක්‍රියාත්මක කළ හැකිය, මෙම පිළිතුර බලන්න .
ටොම් හේල්

74

ටීඑල්; ඩී.ආර්

ඔබේ ජීවිතය යහපත් කර ගැනීම සඳහා එකතු කිරීමට රේඛා වෙත යන Wrap-upමාතෘකාව වෙත යන්න vimrc.

අතින්

දුවන්න :checktime

Vim වලින් පිටත කිසියම් බෆරයක් වෙනස් කර ඇත්දැයි පරීක්ෂා කරන්න. ඔබ ගොනුවක අනුවාද දෙකකින් අවසන් වන්නේ දැයි මෙය පරීක්ෂා කර අනතුරු අඟවයි.

ස්වයංක්‍රීයව

වෙනස්කම් ස්වයංක්‍රීයව පැටවීම සඳහා, ඔබගේ vimrc:

set autoread

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

මෙම පිළිතුර අවවාදයක් එක් කරයි:

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

විසඳුම් සඳහා කියවන්න.

කර්සරය චලනය වීම නවත්වන විට ක්‍රියාත්මක කරන්න

ඔබගේ vimrc:

au CursorHold,CursorHoldI * checktime

පෙරනිමියෙන්, කර්සරය තත්පර 4 ක් රැඳී සිටීමෙන් පසුව කර්සරය හෝල්ඩ් අවුලුවන අතර යාවත්කාලීන වේලාව හරහා වින්‍යාසගත කළ හැකිය .

බෆරය වෙනස් කිරීම හෝ පර්යන්ත නාභිගත කිරීම සඳහා ප්‍රේරකය

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

au FocusGained,BufEnter * :checktime

සරල විම් ඇතුළත ටර්මිනල් කවුළු නාභිගත කිරීම

ඇති FocusGained(ඉහත බලන්න) සරල විම් වැඩ, පර්යන්ත ප්රොජෙක්ට් (Xterm, tmux, ආදිය) තුල ප්ලගිනය ස්ථාපනය: විම්-tmux අවධානය--සිද්ධීන්

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

set -g focus-events on

අවසන් කරන්න

autoreadප්‍රේරක ද හැකි විට දැනුම්දීම් .

vimrcඉහත සියල්ල ක්‍රියාත්මක කිරීමට මගේ රේඛා මෙන්න :

" Triger `autoread` when files changes on disk
" /unix/149209/refresh-changed-content-of-file-opened-in-vim/383044#383044
" /vi/13692/prevent-focusgained-autocmd-running-in-command-line-editing-mode
    autocmd FocusGained,BufEnter,CursorHold,CursorHoldI *
            \ if mode() !~ '\v(c|r.?|!|t)' && getcmdwintype() == '' | checktime | endif

" Notification after file change
" /vi/13091/autocmd-event-for-autoread
autocmd FileChangedShellPost *
  \ echohl WarningMsg | echo "File changed on disk. Buffer reloaded." | echohl None

මාව නිවැරදි දිශාවට යොමු කිරීම ගැන එරිච්බස්චුල්ස්ටau CursorHold ස්තූතියි .

Cmdwin ගැටළුව විසඳීම සඳහා මෙම පිළිතුරට ස්තූතියි .


5
විශිෂ්ට තනතුර! මෙය සුපුරුදු හැසිරීම විය යුතු යැයි හැඟෙන එක් දෙයක් මෙන්
දැනේ

අදහසට ස්තූතියි! විධාන රේඛා කවුළුවේ ( :h cmdwin) දෝෂ ගැන පුදුම වන අය සඳහා : modeපරීක්ෂා කිරීම ප්‍රමාණවත් නොවේ, vi.stackexchange.com/q/14315/6891 බලන්න .
හාලිල් ඔස්ගර්

@ හැලිලෙස්ගර් ස්තූතියි! එම නඩුව ආවරණය කිරීම සඳහා මම මගේ පිළිතුර යාවත්කාලීන කර ඇත (සහ තවත් සමහරක්).
ටොම් හේල්

1
ස්තූතියි! මෙම පිළිතුර පුදුම සහගතයි
ට්‍රොපිලියෝ
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.