In Vim kann ich das Verzeichnis einer aktiven Datei mit diesem Befehl öffnen:
:silent ! start %:p:h
Wenn das Verzeichnis jedoch Sonderzeichen enthält (z. B. skandinavische Buchstaben), wird eine Fehlermeldung angezeigt. Unten finden Sie einen Link zu einem Beispiel.
Der Fehler besagt etwas wie "Das Ziel kann nicht gefunden werden. Bitte stellen Sie sicher, dass Sie es richtig geschrieben haben, und versuchen Sie es erneut." (In finnisch). Das Verzeichnis im obigen Beispiel ist D: \ ölöälä , aber wie Sie sehen, werden die Buchstaben ö und ä im cmd nicht richtig angezeigt. Ich denke das verursacht den Fehler.
Wie kann ich das lösen? Ich bin auf 64-Bit-Win 7.
windows-7
command-line
vim
encoding
martias
quelle
quelle
öä
in Vim selbst?Antworten:
Das ist ein
vim
Fehler.Es ist kein Problem, im Gegensatz zu was
romainl
sagt in einem Kommentar zu der Frage mitcmd
überhaupt. Es hat nichts damit zu tuncmd
eigentlich. Beidecmd
undstart
verhalten sich wie vorgesehen.Das Problem ist, dass
vim
verwendet UTF-8 (Siehe:help unicode
.) zum Speichern und Bearbeiten der Befehlszeichenfolge und Übergeben dieser UTF-8-Zeichenfolge im Istzustand an eine Programmierschnittstelle, die UTF-8 überhaupt nicht akzeptiert. Insbesondere: Es endet damit, dass die UTF-8-Zeichenfolge an das übergeben wirdCreateProcessA()
Funktion. AberCreateProcessA()
nimmt Zeichenketten, die in der Windows-Codepage .vim
sollte Konvertieren Sie die Zeichenfolge zuvor von UTF-8 in die entsprechende Codepage (oder in Unicode und rufen Sie aufCreateProcessW()
stattdessen). Aber das tut es nicht.Infolgedessen wird die Bytefolge in Ihrem UTF-8-Pfadnamen wie von erstellt
vim
von%:p:h
wird behandelt vonCreateProcessA()
als wäre es eine Folge von Bytes in der Windows-Codepage. Sie können das Ergebnis sehen.Es gibt wahrscheinlich keine lokaler Fix dafür. Verwenden von 8.3-Namen (
:8
) behebt das überhaupt nicht. Aber herumspielenvim
'sencoding
Variable kann es in gewissem Maße verbessern (obwohl es mehr als nur das betrifft und nicht der richtige Weg ist, um das Problem anzugehen). Du musst mit Bram Moolenaar sprechen. (Rücksprache mit demvim
7.3 Fehlerliste, ich finde, dass Sie auch sprechen können diese Person Obwohl es immer noch eine gute Idee ist, M. Moolenaar davon zu überzeugen, dass Kikuchan nicht allein ist.)quelle
cmd.exe
oder ein Unterprozess. Und ich stimme auch zu, dass es ein bisschen blöd ist, darauf zu bestehen, dass utf-8-Zeichenfolgen an Befehle gesendet werden, von denen bekannt ist, dass sie diese nicht akzeptieren.cmd
bevor es einsinkt? Die Win32-System-API-Funktion verwendet die Zeichensätze, die als "Taking" definiert sind. Dies ist keine Einschränkung, geschweige denn eine "ernsthafte", insbesondere angesichts der Existenz derW()
Geschmack der API.cmd
. Darin ist es offenbar auch nicht gesunken ist eine API-Variante, die Unicode unterstützt, obwohl ich auch darauf hingewiesen habe. Dieser fortgesetzte Schwachsinn hier beruht entweder darauf, dass man nicht aufpasst, oder auf einer dummen Unwilligkeit, anzuerkennen, dass dieA()
Geschmack der API ist nicht "begrenzt" oder "nutzlos", sondern hat einen genau definierten Zweck, der einfach ist etwas anderes .cmd
und keine Lösung auf Benutzerebene. 2. Du postest eine sehr gute Antwort. 3. Ich danke Ihnen dafür und mache eine kurze allgemeine Bemerkung zu allem ("ob es sich um cmd.exe oder einen Unterprozess handelt", beachten Sie bitte das falsch geschriebene "ob"), das utf-8 nicht unterstützt UND ich