2016-11-24 4 views
0

Gelegentlich muss ich mit gemischten Unix/DOS-Dateien in Vim arbeiten. Diese Datei zeigt am Ende der meisten Zeilen ^M an. Ich kann die ganze Datei nicht in das Unix-Format konvertieren.Vim ausführen: e ++ ff = dos von vimrc

Fix für das heißt :e ++ff=dos

ich versucht habe, dass in meinem vimrc zumindest als shorcut zu übernehmen (wenn nicht AutoCmd), aber ohne Erfolg.

ga für ^M zeigen:

<^M> 13, Hex 0d, Octal 15 

Dieses von vimrc nicht funktionieren:

function! Fix_dos() 
    execute "normal :e ++ff=dos<cr>" 
endfunction 

ich etwas mit kaschieren Feature versucht haben, aber das wird alle ^M Zeichen nicht verbergen.

:set conceallevel=2 
:syntax match Todo /\r/ conceal 

Auch ist es eine Möglichkeit zu erkennen, ob Datei ^M Zeichen zeigen?

Danke für Ihre Hilfe.

Antwort

0

Wenn Sie :e +ff=dos tun, konvertieren Sie die Datei in DOS-Format; d.h. nach dem Schreiben werden alle Zeilenendungen in CR-LF umgewandelt. Sie haben erwähnt, dass Sie nicht in die ganze Datei in Unix-Format konvertieren können, aber wenn die Konvertierung in DOS in Ordnung ist, dann ist dies die Lösung.

Für Ihre Funktion müssen Sie nicht :normal durchlaufen, da der Befehl :e ein Ex-Befehl ist und diese direkt in einer Funktion verwendet werden können. Sie benötigen nur :normal für Normal-Modus-Befehle wie dd. Daher können Sie umschreiben:

function! Fix_dos() 
    " This would be the correct syntax, but no need for :normal: 
    "execute "normal :e ++ff=dos\<cr>" 
    " Also, no need for execute: 
    "execute "e ++ff=dos" 
    edit ++ff=dos 
endfunction 

In der Tat würde ich definieren:

:command! FixDos edit ++ff=dos 

Wenn Sie nicht die gesamte Datei verdeckte können, werden Sie mit dem ^M leben müssen; Das Beste, was Sie tun können, ist, sie zu verstecken, wie Sie es mit Verstecken versucht haben.Diese Variante könnte mehr Instanzen ^M durch auch appying in anderen Syntax Gruppen fängt:

:syntax match Todo /\r/ conceal containedin=ALL 
0

Das Öffnen eines Puffers im DOS-Dateiformat konvertiert nicht die Datei in UNIX-Format. Es reicht nur aus, wenn Sie den Puffer als DOS bearbeiten und auch als DOS schreiben wollen. Verstecken^M konvertiert auch nicht - Ihre Fragen geben mir den Eindruck, dass Sie denken, dass es tut.

Wenn Sie LF-Zeilenenden-only konvertieren wollen,

  1. alle^M Zeichen entfernen: :%s/<C-V><cr>//ge<cr>. Sie können das in eine Funktion oder einen Autokommandom einbauen.
  2. Mark die Puffer Endungen nur LF Leitung zu verwenden: :setlocal ff=unix
+0

Ich ziehe es mit zwei klaren Schritten DOS UNIX zu konvertieren: (1) ': e ++ ff = dos ' und dann (2) ': w ++ ff = unix' – Ves