Datei mit der Länge 0 von new: term buffer: vim -c “w! Datei"

Sep 08 2020

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

2 user938271 Sep 08 2020 at 07:13

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'`.