Datei mit der Länge 0 von new: term buffer: vim -c “w! Datei"
Ich habe eine Datei mk.outmit ANSI-Codes, die bereinigt werden kann, indem Sie sie in Vim öffnen und Folgendes ausgeben:
:term cat % " Interpret codes in new buffer
:only " Close source buffer `mk.out`
:w! mk.out " Overwrite `mk.out` with cleaned up text
Dies funktioniert gut, aber es traten Probleme auf, als ich versuchte, dies zu automatisieren:
vim -c ":term cat %" -c ":only" -c ":w! mk.out" mk.out
Ich bin ratlos darüber, dass dies zu einem leeren Puffer für bereinigten Code und für führt mk.out. Wenn ich den Befehl zum Überschreiben entfernemk.out , enthält der neue Puffer jedoch immer noch den bereinigten Text, und ich kann den Befehl zum Überschreiben manuell ausgeben.
Ich habe auch versucht, in eine andere Datei zu überschreiben mk.cln( clnist für sauber ). Im Gegensatz dazu wird der neue Puffer für den sauberen Text nicht auf mysteriöse Weise leer (gut), aber die geschriebene Datei mk.clnist immer noch leer:
vim -c ":term cat %" -c ":only" -c ":w! mk.cln" mk.out
Dies ist unabhängig davon, ob der "Knall" !im Schreibbefehl vorhanden ist. Wie erwartet mk.outwird nicht gestört. Um Probleme von der Aufforderung zum Überschreiben auszuschließen mk.cln, habe ich sichergestellt, dass mk.clndiese vorher nicht vorhanden waren.
Für :term‚s neue Puffer, würde dazu führen , was den :writeBefehl eine leere Datei , wenn vorgelegt über Vims schreiben -cSchalter, aber nicht , wenn interaktiv ausgegeben?
Andere kontextbezogene Details
Das Schreiben einer neuen Datei aus einer vorhandenen Datei funktioniert, aber die ANSI-Codes werden nicht bereinigt:
vim -c ":w! mk.cln" mk.out
Mir ist klar, dass ich etwas brauche :wq, aber ich versuche erst einmal, Fehler zu beheben.
Vim-Version
VIM - Vi IMproved 8.2 (2019 Dec 12, compiled Mar 30 2020 21:51:17)
Included patches: 1-486
Modified by <[email protected]>
Compiled by <[email protected]>
Huge version with GTK3 GUI. Features included (+) or not (-):
+acl -farsi -mouse_sysmouse -tag_old_static
+arabic +file_in_path +mouse_urxvt -tag_any_white
+autocmd +find_in_path +mouse_xterm -tcl
+autochdir +float +multi_byte +termguicolors
-autoservername +folding +multi_lang +terminal
+balloon_eval -footer -mzscheme +terminfo
+balloon_eval_term +fork() +netbeans_intg +termresponse
+browse +gettext +num64 +textobjects
++builtin_terms -hangul_input +packages +textprop
+byte_offset +iconv +path_extra +timers
+channel +insert_expand +perl/dyn +title
+cindent +job +persistent_undo +toolbar
+clientserver +jumplist +popupwin +user_commands
+clipboard +keymap +postscript +vartabs
+cmdline_compl +lambda +printer +vertsplit
+cmdline_hist +langmap +profile +virtualedit
+cmdline_info +libcall +python/dyn +visual
+comments +linebreak +python3/dyn +visualextra
+conceal +lispindent +quickfix +viminfo
+cryptv +listcmds +reltime +vreplace
+cscope +localmap +rightleft +wildignore
+cursorbind +lua/dyn +ruby/dyn +wildmenu
+cursorshape +menu +scrollbind +windows
+dialog_con_gui +mksession +signs +writebackup
+diff +modify_fname +smartindent +X11
+digraphs +mouse +sound -xfontset
+dnd +mouseshape +spell +xim
-ebcdic +mouse_dec +startuptime +xpm
+emacs_tags -mouse_gpm +statusline +xsmp_interact
+eval -mouse_jsbterm -sun_workshop +xterm_clipboard
+ex_extra +mouse_netterm +syntax -xterm_save
+extra_search +mouse_sgr +tag_binary
system vimrc file: "/etc/vimrc"
user vimrc file: "$HOME/.vimrc" 2nd user vimrc file: "~/.vim/vimrc" user exrc file: "$HOME/.exrc"
system gvimrc file: "/etc/gvimrc"
user gvimrc file: "$HOME/.gvimrc" 2nd user gvimrc file: "~/.vim/gvimrc" defaults file: "$VIMRUNTIME/defaults.vim"
system menu file: "$VIMRUNTIME/menu.vim" fall-back for $VIM: "/etc"
f-b for $VIMRUNTIME: "/usr/share/vim/vim82"
Compilation: gcc -c -I. -Iproto -DHAVE_CONFIG_H -DFEAT_GUI_GTK -I/usr/include/gtk-3.0 -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/uuid -I/usr/include/harfbuzz -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/gio-unix-2.0/ -I/usr/include/atk-1.0 -I/usr/include/at-spi2-atk/2.0 -I/usr/include/at-spi-2.0 -I/usr/include/dbus-1.0 -I/usr/lib/dbus-1.0/include -D_REENTRANT -ggdb -O2 -pipe -Wall -Werror=format-security -fstack-protector-strong --param=ssp-buffer-size=4 -fdebug-prefix-map=/usr/src/ports/vim/vim-8.2.0486-1.x86_64/build=/usr/src/debug/vim-8.2.0486-1 -fdebug-prefix-map=/usr/src/ports/vim/vim-8.2.0486-1.x86_64/src/vim-8.2.0486=/usr/src/debug/vim-8.2.0486-1 -fstack-protector-strong -D_REENTRANT -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1
Linking: gcc -L. -fstack-protector-strong -L/usr/local/lib -Wl,--as-needed -o vim.exe -lgtk-3 -lgdk-3 -lpangocairo-1.0 -lpango-1.0 -latk-1.0 -lcairo-gobject -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0 -lintl -lSM -lICE -lXpm -lXt -lX11 -lXdmcp -lSM -lICE -lm -lncursesw -lcanberra -liconv -lacl -lattr -lintl -Wl,--enable-auto-import -Wl,--export-all-symbols -Wl,--enable-auto-image-base -fstack-protector-strong -L/usr/lib/perl5/5.30/x86_64-cygwin-threads/CORE -lperl -lpthread -ldl -lcrypt
Antworten
Was würde für den neuen Puffer von: term dazu führen, dass der Befehl: write eine leere Datei schreibt, wenn er über den Schalter -c von Vim gesendet wird, aber nicht, wenn er interaktiv ausgegeben wird?
Sie müssen wahrscheinlich auf ausstehende Updates warten. Wenn ja, brauchen Sie term_wait().
Versuchen Sie diesen Shell-Befehl:
vim -Nu NONE -i NONE -U NONE +'term cat %' +'call term_wait(bufnr("")) | bw! # | w! mk.out | qa!' mk.out
Wenn es nicht funktioniert, versuchen Sie, die Wartezeit zu verlängern:
vim -Nu NONE -i NONE -U NONE +'term cat %' +'call term_wait(bufnr(""), 100) | bw! # | w! mk.out | qa!' mk.out
^^^
wait 100ms instead of 10
Siehe : h term_wait () .
Wenn term_waitnicht funktioniert, Erfolg wurde durch den Ersatz zumindest in den OP der Fall war call term_wait(bufnr(""), xxx )mit sleep xxx m, wo xxx ist die Wartezeit in Millisekunden (500 für den OP gearbeitet). Der letzte Befehl kann dann auf verkürzt werden
`vim -Nu NONE -i NONE -U NONE +':term cat mk.out' +'sleep 500 m | silent! w! mk.out | qa'`.