Jak mohu soubor do paměti při editaci?

hlasů
6

Krátká verze: echo „zkoušení“ | vim - | grep „dobré“

To nefunguje jako vim nebude výstup do kanálu. To říká: „Vim: Varování: výstup není k terminálu“. Nějaký způsob, jak to udělat? podpora cross-editor by bylo příliš pěkné.

Snažil jsem se pojmenované kanály, ale vim jim neotevře.

Dlouhá verze: echo $ Heslo | gpg -q -d --passphrase-fd 0 $ filename | vim - | „Nějak gpg zašifrovat jej pomocí $ HESLO a uložit jej zpět do $ filename“.

Snažím se upravit zašifrovaný soubor gpg, ale rád bych, aby neměl dešifrovaný soubor na disku kdykoliv.

Plné scénář je zde: https://github.com/ptarjan/viencrypt

Položena 26/05/2009 v 01:24
zdroj uživatelem
V jiných jazycích...                            


8 odpovědí

hlasů
7

Mějte na paměti, že ve výchozím nastavení se Vim vytvořit odkládací soubor na disku. Spustit vim pomocí následujícího příkazu se mu vyhnout:

vim "+set noswapfile"
Odpovězeno 26/05/2009 v 06:41
zdroj uživatelem

hlasů
5

Dalo by se jen vim to šifrovat pro vás.

Před uložením souboru ve vim, filtrovat obsah prostřednictvím vašeho gpg Encrypter:

    :! {Rozsah} {filtr} [arg] * [!] [!]:! Rozsah *
          Filtr {rozsah} linky přes externí program
          {filtr}. Vim nahradí volitelných rány s
          Nejnovější svěřeno velení a připojí volitelný [arg].
          Vim uloží výstup příkazu filtru v
          dočasný soubor a potom přečte soubor do
          pufr. Vim využívá možnost ‚shellredir‘ přesměrovat
          výstupní filtr do dočasného souboru.
          Je-li však ‚shelltemp‘ volba je vypnuta poté potrubí
          jsou používány, když je to možné (Unix).
          Když je ‚R‘ flag obsaženy v označeních ‚cpoptions‘ v
          filtrované linky jsou odstraněny, pokud
          |: Keepmarks | Příkaz, který používá. Příklad:>
            : keepmarks '<,'> třídit!
    <            
          Pokud je počet řádků po filtrování je menší než
          předtím, ochranné známky chybějících řádků jsou odstraněny tak jako tak.
        w 

Takže, chcete-li jej přefiltrovat přes gpg (Hádám, u vlajek zde):

:%!gpg -q -d -p $password
:w $filename

Budete muset exportovat $passworda $filenameproměnné prostředí, takže vim má přístup k nim, pokud je chcete používat v rámci vim.

Odpovězeno 26/05/2009 v 03:32
zdroj uživatelem

hlasů
3

Dalo by se připojit tmpfs souborový systém (který ukládá data do paměti) a někam dělat svou práci tam.

EDIT (!): Omlouváme se, aby to ramfs. Rozdíl je v tom tmpfs může být stránkovaného mimo vyměnit místo, které nechcete. Případně můžete vypnout všechna zařízení pro swap (s swapoff) a použijte tmpfs.

Odpovězeno 26/05/2009 v 01:29
zdroj uživatelem

hlasů
1

Další možností je použít gnupg plugin pro Vim namísto objevování Ameriky. :) Samozřejmě, že jsem trochu zaujatý, protože jsem současný správce zásuvného modulu.

Odpovězeno 31/05/2012 v 06:21
zdroj uživatelem

hlasů
1

Řešení k původnímu problému (pokud to vidím já):

secret.txt obsahuje šifrovaný text.

./encode.sh je symetrický script kodér.

Následující příkaz načte text z secret.txt, dekódovat, aby bylo upravovat v Vim, kódovat, a zapsat jej zpět do secret.txt:

$ cp secret.txt | \
  ./encode.sh | \
  vim - -n -u NONE \
      -c ':autocmd VimLeave * :exec "%!./encode.sh" | write! tmp'; \
  mv tmp secret.txt

Poznámky:

  • :autocmd VimLeave * <command>: Provést <command>před odjezdem Vim na libovolný soubor
  • :exec "%!./encode.sh" | write! secret.txt: Běh ./encode.shna celý obsah vyrovnávací paměti jako filtr, pak napsat do vyrovnávací pamětisecret.txt
  • „Jako filtrem“ se rozumí, že obsah vyrovnávací paměti se přivádí do ./encode.sh. Obsah vyrovnávací paměti bude nahrazen standardní výstup ./encode.shpo dokončení jeho provádění.

Ale musím říct, toto řešení je ošklivý. Doporučil bych stejně jako zvonečník : se podívat na automatické příkazy uvedené ( :help autocommand) a snaží se dělat celý proces úpravy uvnitř Vim.

Konečně vedlejší poznámka: Vim má svůj vlastní šifrovací příkaz, který dělá přesně to, co je popsáno na projektové webové stránce : „Je to jednoduše dešifruje soubor do souboru čitelného pouze vy, můžete jej upravovat ve svém oblíbeném editoru a pak ho to rencrypts a uloží soubor zpět odkud pochází.“

Pomoc Vim ( :help :X) říká o algoritmu:

  • Algoritmus používá rozbitné. Klíčovým 4 postava asi jednu hodinu, klíč 6 postava v jednom dni (na Pentium 133 PC). To vyžaduje, že víte, nějaký text, který se musí objevit v souboru. Odborník to může zlomit na libovolnou klávesu. Po dešifrovat text, to také znamená, že klíč může být odhalena, a další soubory šifrované se stejným klíčem lze dešifrovat.
  • Pkzip používá stejný šifrování a US Govt nemá žádné námitky proti jeho exportu. PKZip veřejná APPNOTE.TXT soubor popisuje tento algoritmus v detailu.
Odpovězeno 26/05/2009 v 22:30
zdroj uživatelem

hlasů
1

Můžete použít %ppříkaz pro tisk souboru upravován na standardní výstup.

V tomto příkladu Vim čte svůj standardní vstup a odešle ji na standardní výstup:

$ (echo one; echo two; echo three; echo four) | \
  vim - -nes -u NONE  -c ':%p' -c ':q!' | \
  tail -n +2 | \
  grep t
two
three

Poznámky:

  • vim -: Číst ze standardního vstupu
  • -n: Nevytvářejí odkládací prostor, používat pouze paměť
  • -e: Start v bývalém režimu
  • -s: Tichý nebo v dávkovém režimu
  • -u NONE: Nečtou .vimrc(Pokud chcete, aby .vimrcse číst, přeskočte tuto volbu však různí lidé mají různé. .vimrc-s, takže pokud nechcete psát -u NONE, může váš kód nebude pracovat pro jinou osobu, nebo dokonce pro vás, pokud vás změňte svůj .vimrc).
  • -c <something>: Spustit něco jako příkaz
  • -c ':%p': Vytištění obsahu vyrovnávací paměti na standardní výstup
  • -c 'q!': ukončit bez uložení
  • tail -n +2: Hodit první řádek Vim výstupu pryč (to je čára ' Vim: Reading from stdin...‚)

V následujícím příkladu, Vim dělá vlastně něco užitečného: odstraní první sloupec standardního vstupu.

$ (echo one; echo two; echo three; echo four) | \
  vim - -nes -u NONE  -c ':exec "normal G\<c-v>ggx"' -c ':%p' -c ':q!' | \
  tail -n +2
ne
wo
hree
our

Poznámky:

  • :exec: Spustit následující příkaz (příkaz příkazového řádku, není normální příkazový režim)
  • normal: Příkaz příkazového řádku, který provádí dané příkazy normálního režimu
  • G: Přejděte na poslední řádek souboru
  • \<c-v>: Výběr blok startu
  • gg: Přejít na první řádek
  • x: Odstranění vybrané znaky

UPRAVIT:

Mohu říci vim problém jen „:% s“ hned po „: WQ“ z interaktivního sezení?

Můžete říct, vim věci jako „run příkazového X před ukončením“, s použitím např VimLeave Automatický příkaz (viz :help autocommand, :help VimLeave):

$ (echo "line 1"; echo "line 2") | \
  vim - -nes -u NONE -c ':autocmd VimLeave * :%p'
Vim: Reading from stdin...
:q!        # you type :q!
line 1
line 2

Problém je s: příkazem „% s“. Pokud použijete „-e“ argumentu, nebudete mít vizuální editor. Pokud nechcete použít „-e“, bude Vim nevytiskne výsledek „:% p“ na standardní výstup, ale k terminálu.

Učiním jiný návrh na jiné místo.

Odpovězeno 26/05/2009 v 07:04
zdroj uživatelem

hlasů
1

To je pravda: Vim nebude výstup do kanálu. Vim nebere svůj vstup a výstup bude na trubku, ale spíše ji vysílá do okna editoru, kde je možné jej upravit. Nelze pokračovat v sekvenci potrubí po vim. Tak zkuste:

echo $ Heslo | gpg -q -d --passphrase-fd 0 $ filename | vim -

Nebo nepoužívají vim vůbec.

Chcete-li upravit soubor před přechodem zpět do gpg budete muset udělat ve dvou krocích.

Odpovězeno 26/05/2009 v 01:35
zdroj uživatelem

hlasů
0

Jste něco od uživatele root nelze skrývat, dokonce iv paměti (mají přístup na / dev / mem). To je fakt, že se nelze vyhnout.

Takže bych prostě použít dočasné soubory ve svém domovském adresáři, která by měla být chráněna před všemi kromě uživatele root. Na jednom řádku, zadejte:

echo "testing" >~/proc$$ ; vim ~/proc$$ ;
    grep "good" ~/proc$$ ; rm -f ~/proc$$

Pokud chcete, skutečné zabezpečení, přesuňte soubor do boxu, kde jste jediným uživatele root a dělat to tam. Potom přesunout zašifrovaný soubor zpět.

Odpovězeno 26/05/2009 v 01:34
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more