Fórum Root.cz

Hlavní témata => Software => Téma založeno: Michal Švarc 02. 11. 2016, 09:44:32

Název: Textový editor bez BOM
Přispěvatel: Michal Švarc 02. 11. 2016, 09:44:32
Potřeboval bych radu:
a) nějaký textový editor kde by šlo nastavit aby se utf-8 ukládalo bez BOM (1 (http://www.dagblog.cz/2003_08_24_archive.html), 2 (http://www.dagblog.cz/2003/09/co-den-dal-aneb-krtk-porozhldnut-jirka.html)) a v lepším případě i ono nastavení
b) jak vypnout BOM v bluefish (pokud to jde)
c) script (nebo příkaz) na odstranění BOM v již vytvořených souborech (přičemž mám asi soubory s BOM i bez BOM)
Název: Re:Textový editor bez BOM
Přispěvatel: Petr Krčmář 02. 11. 2016, 09:57:57
Umí to třeba Vim.

Zjistím, jestli mám v otevřeném souboru BOM:

Kód: [Vybrat]
:set bomb?
Odstraním BOM a uložím na disk:

Kód: [Vybrat]
:set nobomb
:w
Název: Re:Textový editor bez BOM
Přispěvatel: pavlix 02. 11. 2016, 09:59:26
Potřeboval bych radu:
a) nějaký textový editor kde by šlo nastavit aby se utf-8 ukládalo bez BOM (1 (http://www.dagblog.cz/2003_08_24_archive.html), 2 (http://www.dagblog.cz/2003/09/co-den-dal-aneb-krtk-porozhldnut-jirka.html)) a v lepším případě i ono nastavení
b) jak vypnout BOM v bluefish (pokud to jde)
c) script (nebo příkaz) na odstranění BOM v již vytvořených souborech (přičemž mám asi soubory s BOM i bez BOM)

Měl jsem za to, že texťáky bez nesmyslů jako je BOM jsou na unixových systémech včetně linoxových distribucí standard.
Název: Re:Textový editor bez BOM
Přispěvatel: ByCzech 02. 11. 2016, 10:36:57
Tak konzolový editor byl uveden, uvedu tedy k tomu editor(y) s GUI. V KDE standardní komponenta textového editoru, kterou používají mj. např. editor KWrite, Kate to také umí. Je to v nastavení a taky se to dá hodit jako tlačítko na nástrojovou lištu.
Název: Re:Textový editor bez BOM
Přispěvatel: Ivan 02. 11. 2016, 10:58:50
emacs
Název: Re:Textový editor bez BOM
Přispěvatel: Kit 02. 11. 2016, 11:23:15
Umí to třeba Vim.
Odstraním BOM a uložím na disk:
Kód: [Vybrat]
:set nobomb
:w

Nedávno jsem to potřeboval udělat na několika stovkách souborů. Ručně to samozřejmě němělo smysl, tak jsem si na to napsal skript. Dá se to udělat nějak hromadně udělat přímo ve Vimu?
Název: Re:Textový editor bez BOM
Přispěvatel: Pavel Tisnovsky 02. 11. 2016, 11:41:27
Umí to třeba Vim.
Odstraním BOM a uložím na disk:
Kód: [Vybrat]
:set nobomb
:w

Nedávno jsem to potřeboval udělat na několika stovkách souborů. Ručně to samozřejmě němělo smysl, tak jsem si na to napsal skript. Dá se to udělat nějak hromadně udělat přímo ve Vimu?

Muzes si to dat do autocommands, at jiz pri vytvareni bufferu nebo pred ulozenim (myslim nastaveni bomb, filencoding a pro jistotu i filetype).
Název: Re:Textový editor bez BOM
Přispěvatel: Kit 02. 11. 2016, 12:26:15
Umí to třeba Vim.
Odstraním BOM a uložím na disk:
Kód: [Vybrat]
:set nobomb
:w

Nedávno jsem to potřeboval udělat na několika stovkách souborů. Ručně to samozřejmě němělo smysl, tak jsem si na to napsal skript. Dá se to udělat nějak hromadně udělat přímo ve Vimu?

Muzes si to dat do autocommands, at jiz pri vytvareni bufferu nebo pred ulozenim (myslim nastaveni bomb, filencoding a pro jistotu i filetype).

To souhlasí, ale to mi neřeší problém, když obdržím několik set souborů, ve kterých je ten BOM na začátku. Musel bych každý z těch souborů otevřít a uložit. Lze to udělat hromadně jedním příkazem?
Název: Re:Textový editor bez BOM
Přispěvatel: gll 02. 11. 2016, 13:21:00
Umí to třeba Vim.
Odstraním BOM a uložím na disk:
Kód: [Vybrat]
:set nobomb
:w

Nedávno jsem to potřeboval udělat na několika stovkách souborů. Ručně to samozřejmě němělo smysl, tak jsem si na to napsal skript. Dá se to udělat nějak hromadně udělat přímo ve Vimu?

Muzes si to dat do autocommands, at jiz pri vytvareni bufferu nebo pred ulozenim (myslim nastaveni bomb, filencoding a pro jistotu i filetype).

To souhlasí, ale to mi neřeší problém, když obdržím několik set souborů, ve kterých je ten BOM na začátku. Musel bych každý z těch souborů otevřít a uložit. Lze to udělat hromadně jedním příkazem?

http://stackoverflow.com/a/3622153/1112457
Název: Re:Textový editor bez BOM
Přispěvatel: Kit 02. 11. 2016, 13:38:25
To souhlasí, ale to mi neřeší problém, když obdržím několik set souborů, ve kterých je ten BOM na začátku. Musel bych každý z těch souborů otevřít a uložit. Lze to udělat hromadně jedním příkazem?

http://stackoverflow.com/a/3622153/1112457

Ano, tak nějak jsem to tenkrát udělal:
Kód: [Vybrat]
# Removing BOM from all text files in current directory:
sed -i '1 s/^\xef\xbb\xbf//' *.txt
Název: Re:Textový editor bez BOM
Přispěvatel: Kit 02. 11. 2016, 13:52:37
Ještě jsem našel jedno elegantní řešení:
Kód: [Vybrat]
find . -type f -name "*.php" -print0 | xargs -0 bomstrip-files
Název: Re:Textový editor bez BOM
Přispěvatel: Martin_P 02. 11. 2016, 15:24:59
Nedávno jsem to potřeboval udělat na několika stovkách souborů. Ručně to samozřejmě němělo smysl, tak jsem si na to napsal skript. Dá se to udělat nějak hromadně udělat přímo ve Vimu?

Vim se dá spustit neinteraktivně. Je třeba mít seznam příkazů pro Vim, které se umístí do souboru, např. vim_remove_bom.txt. Podle rady výše jde o příkazy:

Kód: [Vybrat]
:set nobomb
:wq

Pak se Vim spustí s touto syntaxí:

Kód: [Vybrat]
vim -s vim_remove_bom.txt my_file.txt

... to je samozřejmě forma vhodná ke zapracování ve skriptu. Sice nejde o spouštění "přímo z Vimu", ale alespoň pomocí prostředků Vimu.
Název: Re:Textový editor bez BOM
Přispěvatel: Kit 02. 11. 2016, 15:49:32
Vim se dá spustit neinteraktivně. Je třeba mít seznam příkazů pro Vim, které se umístí do souboru, např. vim_remove_bom.txt. Podle rady výše jde o příkazy:

Kód: [Vybrat]
:set nobomb
:wq

Kód: [Vybrat]
vim -s vim_remove_bom.txt my_file.txt

... to je samozřejmě forma vhodná ke zapracování ve skriptu. Sice nejde o spouštění "přímo z Vimu", ale alespoň pomocí prostředků Vimu.

Tohle bohužel nefunguje:
Kód: [Vybrat]
vim -s nobomb.vim *.php
Kód: [Vybrat]
E173: 1 more file to edit

To už raději použít ten sed nebo bomstrip-files
Název: Re:Textový editor bez BOM
Přispěvatel: Kit 02. 11. 2016, 16:00:05
Ten jednoduchý prográmek bomstrip je filtrem. Dá se tedy snadno zařadit do Gitu jako filtr "clean" a/nebo "smudge".
Název: Re:Textový editor bez BOM
Přispěvatel: pavlix 02. 11. 2016, 16:09:20
To souhlasí, ale to mi neřeší problém, když obdržím několik set souborů, ve kterých je ten BOM na začátku. Musel bych každý z těch souborů otevřít a uložit. Lze to udělat hromadně jedním příkazem?

http://stackoverflow.com/a/3622153/1112457

Ano, tak nějak jsem to tenkrát udělal:
Kód: [Vybrat]
# Removing BOM from all text files in current directory:
sed -i '1 s/^\xef\xbb\xbf//' *.txt

V tom případě ovšem vůbec netuším, co tady řešíme. :D
Název: Re:Textový editor bez BOM
Přispěvatel: Martin_P 02. 11. 2016, 16:28:30
Kód: [Vybrat]
E173: 1 more file to edit

A nešlo by využít něco z této dokumentace (http://vim.wikia.com/wiki/Run_a_command_in_multiple_buffers)?

Jinak tohle je spíš pro zajímavost - asi nemá smysl to roubovat na Vim, když existují jiná, funkční řešení. :-)
Název: Re:Textový editor bez BOM
Přispěvatel: Kit 02. 11. 2016, 17:23:23
A nešlo by využít něco z této dokumentace (http://vim.wikia.com/wiki/Run_a_command_in_multiple_buffers)?

Jinak tohle je spíš pro zajímavost - asi nemá smysl to roubovat na Vim, když existují jiná, funkční řešení. :-)

Ano, to je přesně ono, díky za navedení:
Kód: [Vybrat]
$ vim
:args *.php
:argdo set nobomb | w

Roubování na Vim může mít smysl, pokud to chci udělat v celém stromu (což zvládne i find|sed), případně chci udělat jiné úpravy.
Název: Re:Textový editor bez BOM
Přispěvatel: karlik 02. 11. 2016, 18:06:23
vim -e -c ':set nobomb' -c ':wq'  nějaký.soubor
Název: Re:Textový editor bez BOM
Přispěvatel: Kit 02. 11. 2016, 18:22:50
vim -e -c ':set nobomb' -c ':wq'  nějaký.soubor

To je jen pro jeden soubor.

Podobně se to dá udělat i pro celý strom zdrojáků:
Kód: [Vybrat]
vim -e -c ':arg **/*.php' -c ':argdo set nobomb | wq'
Název: Re:Textový editor bez BOM
Přispěvatel: ByCzech 03. 11. 2016, 00:36:24
Ještě jsem našel jedno elegantní řešení:
Kód: [Vybrat]
find . -type f -name "*.php" -print0 | xargs -0 bomstrip-files

elegantnější mi přijde:

Kód: [Vybrat]
bomstrip-files *.php
Název: Re:Textový editor bez BOM
Přispěvatel: Kit 03. 11. 2016, 01:14:17
Ještě jsem našel jedno elegantní řešení:
Kód: [Vybrat]
find . -type f -name "*.php" -print0 | xargs -0 bomstrip-files

elegantnější mi přijde:

Kód: [Vybrat]
bomstrip-files *.php

Samotný skript bomstrip-files neumí procházet podadresáře.
Název: Re:Textový editor bez BOM
Přispěvatel: ByCzech 03. 11. 2016, 01:30:06
Samotný skript bomstrip-files neumí procházet podadresáře.

Pokud je potřeba i podadresáře, tak samozřejmě souhlas.