Jak zatrzymać Gedit, Gvim, Vim, Nano przed dodawaniem znaku nowej linii End-of-File?

42

Czasami chcę, aby ostatni wiersz pliku tekstowego był prostym ciągiem tekstu bez dołączanego znaku nowej linii : ... np. aby połączyć z nim kolejny plik.

Kilku redaktorów automatycznie modyfikuje mój tekst, dodając znak nowej linii, nawet jeśli nie nacisnąłem Enter .

Remains unmodified: Emacs, SciTE, Kate, Bluefish, Notepad (wino)

Newline is added: Gedit, Gvim, Vim, Nano

Chciałbym wiedzieć, czy istnieje jakiś sposób na ulepszenie Gedita, Gvima i Vima, aby zapisać tylko to, co wpisałem ... a nawet Nano może się przydać

Obecnie używam Gedit i zajmuję się Gvimem / Vimem, więc warto wiedzieć, jak „włączać / wyłączać” te ...

PS . Po ponownym otwarciu tego samego pliku w Gedit, Gvim i Vim położenie kursora na końcu pliku znajduje się na końcu tekstu, podczas gdy powinno ono naprawdę pojawić się w następnym (pustym) wierszu. Jest to mylące (ale wynika to z tego, do czego jestem przyzwyczajony).

Użyłem heksitora, aby sprawdzić powyższe obserwacje.

Peter.O
źródło

Odpowiedzi:

49

W przypadku gEdit wydaje się, że nie ma sposobu, aby wyłączyć wstawianie nowego wiersza na końcu, patrz ta odpowiedź .Zainstaluj gEdit

Dla VIM Zainstaluj vim (i gVim Zainstaluj vim ) można - wykonując następujące opcje: :set binary. Ustawienie binarne spowoduje zapisanie pliku w niezmienionej postaci i nie wstawianie nowego wiersza na końcu dokumentu (chyba że już istnieje, w którym zostanie zachowany). W każdej chwili możesz przywrócić tę opcję za pomocą :set nobinary.

Nano Zainstaluj Nano jest trochę łatwiejsze. Możesz uruchomić nano z -Lflagą (lub --nonewlinesjeśli jesteś bardziej typem wizualnym). Spowoduje to wyłączenie automatycznego dodawania nowego wiersza na końcu pliku (o ile nie został wprowadzony). Idealnie może skonfigurować ten alias w twojej ~/.bashrc: alias nano="nano -L", który miał zapoczątkować Nano z flagą żadne nowe linie w nim zawarte!

Ponieważ nie wiem dokładnie, co robisz, wskażę Ci, dlaczego pliki powinny kończyć się nową linią? co może wyjaśniać, dlaczego tam są. W skrócie, niektóre aplikacje zakończą się niepowodzeniem, jeśli nie znajdą EOLbezpośrednio przedEOF

Marco Ceppi
źródło
1
Dzięki Marco, świetna odpowiedź ... „Dlaczego warto ...” to ciekawa kolekcja „dlaczego”… Osobiście jestem bardzo „świadomy” (dlatego to zauważyłem :) ale z pewnością jest to dobre referencje dla wszystkich (łącznie ze mną) ... ale wolę wiedzieć , że dodałem lub nie dodałem go ... Może jest niejasna wtyczka do Gedit ...
Peter.O
3
Wydaje się, że dla Gvim / Vim wymaga ustawienia dwóch opcji ... zgodnie z : help eol ...When writing a file and this option ('eol') is off and the 'binary' option is on, no EOL will be written for the last line in the file.
Peter.O
1
Gedit (Launchpad) zdaje sobie sprawę z tego problemu i umieści go na „liście życzeń” .... (chciałbym, ale nie wstrzymam się z tym! Jeśli ten wyciąg oznacza cokolwiek: „... ) wolałaby wprowadzać użytkowników w błąd ”
Peter.O,
2
W przypadku nano możesz domyślnie set nonewlinesustawić -Ltryb ~ / .nanorc (lub / etc / nanorc) .
mwfearnley
Użyj editorconfig (editorconfig, org) - wtyczki dostępne dla vim i gedit. Określ żądane opcje w pliku .editorconfig.
ddbug
16

W przypadku gEdit:

Jeśli używasz systemu Ubuntu 12.04 lub nowszego, możesz już ustawić zachowanie.

Poprzez graficzny interfejs użytkownika:

  1. Uruchom edytor dconf ( dconf-editor)
  2. Przejdź do orggnomegeditpreferenceseditor
    (lub po prostu wyszukaj ensure-trailing-newline)
  3. Odznacz, ensure-trailing-newlinejeśli nie chcesz automatycznie dodawać nowych linii.

W wierszu poleceń:

  1. Otwórz terminal ( ctrl+ alt+ T)
  2. wprowadź następujące polecenie

    gsettings set org.gnome.gedit.preferences.editor ensure-trailing-newline false
    

    i jesteś skończony.

Odniesienie | Błąd Launchpad

Ravi Gadhia
źródło
1
Dzięki. Dobrze wiedzieć. Próbowałem i działa ... (+1)
Peter.O
co z redaktorem Pluma? (nie widzę „zapewniania-trailing-newline” dla
plumy
0

Jeśli chcesz tylko napisać plik jednowierszowy, echo jest prawdopodobnie najłatwiejszym rozwiązaniem:

echo -n "the contents of my file" > myfile
jpillora
źródło