Advarsel "Input is not from a terminal" i Vim: Årsager og løsninger

Hvorfor får man en advarsel om "Input is not from a terminal" og efterfølgende en terminal med ødelagt opførsel, når man åbner vim gennem find | xargs, som vist her: find . -name "*.txt" | xargs vim?

Når du åbner Vim gennem find | xargs, får du advarslen "Input is not from a terminal" og en terminal med ødelagt opførsel, fordi Vim forventer input direkte fra en terminal, hvilket xargs ikke leverer; brug i stedet find . -name "*.txt" -exec vim {} + for korrekt funktion.

Hvorfor får man en advarsel om "Input is not from a terminal" og efterfølgende en terminal med ødelagt opførsel, når man åbner vim gennem find | xargs?

Når du bruger kommandoen find . -name "*.txt" | xargs vim, kan du støde på advarslen "Input is not from a terminal" og opleve, at terminalen opfører sig mærkeligt. Dette sker af flere grunde:

  • Standard Input: Vim forventer at modtage input direkte fra en terminal. Når du bruger xargs, bliver input ikke sendt direkte fra en terminal, hvilket forårsager advarslen.
  • Terminal Kontrol: Vim forsøger at kontrollere terminalen for at håndtere brugerinput og vise output korrekt. Når input ikke kommer fra en terminal, kan Vim ikke udføre denne kontrol korrekt, hvilket fører til uforudsigelig opførsel.
  • Alternativ Kommando: For at undgå dette problem kan du bruge find . -name "*.txt" -exec vim {} +. Denne kommando bruger -exec flaget til at åbne hver fil med Vim direkte, hvilket sikrer, at input kommer fra en terminal.

Her er en alternativ løsning:

find . -name "*.txt" -exec vim {} +

Ved at bruge denne metode undgår du advarslen og sikrer, at Vim fungerer korrekt i terminalen.