Fórum Root.cz
Hlavní témata => Software => Téma založeno: 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)
-
Umí to třeba Vim.
Zjistím, jestli mám v otevřeném souboru BOM:
:set bomb?
Odstraním BOM a uložím na disk:
:set nobomb
:w
-
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.
-
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.
-
emacs
-
Umí to třeba Vim.
Odstraním BOM a uložím na disk:
: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?
-
Umí to třeba Vim.
Odstraním BOM a uložím na disk:
: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).
-
Umí to třeba Vim.
Odstraním BOM a uložím na disk:
: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?
-
Umí to třeba Vim.
Odstraním BOM a uložím na disk:
: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
-
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:
# Removing BOM from all text files in current directory:
sed -i '1 s/^\xef\xbb\xbf//' *.txt
-
Ještě jsem našel jedno elegantní řešení:
find . -type f -name "*.php" -print0 | xargs -0 bomstrip-files
-
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:
:set nobomb
:wq
Pak se Vim spustí s touto syntaxí:
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.
-
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:
:set nobomb
:wq
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:
vim -s nobomb.vim *.php
E173: 1 more file to edit
To už raději použít ten sed nebo bomstrip-files
-
Ten jednoduchý prográmek bomstrip je filtrem. Dá se tedy snadno zařadit do Gitu jako filtr "clean" a/nebo "smudge".
-
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:
# 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
-
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í. :-)
-
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í:
$ 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.
-
vim -e -c ':set nobomb' -c ':wq' nějaký.soubor
-
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ů:
vim -e -c ':arg **/*.php' -c ':argdo set nobomb | wq'
-
Ještě jsem našel jedno elegantní řešení:
find . -type f -name "*.php" -print0 | xargs -0 bomstrip-files
elegantnější mi přijde:
bomstrip-files *.php
-
Ještě jsem našel jedno elegantní řešení:
find . -type f -name "*.php" -print0 | xargs -0 bomstrip-files
elegantnější mi přijde:
bomstrip-files *.php
Samotný skript bomstrip-files neumí procházet podadresáře.
-
Samotný skript bomstrip-files neumí procházet podadresáře.
Pokud je potřeba i podadresáře, tak samozřejmě souhlas.