Como posso abrir um arquivo somente leitura na linha de comando com o emacs / vi / vim

79

Existe uma maneira de dizer ao emacs / vi / vim (na linha de comando) que eu quero visualizar o arquivo em view-modeou read-only.

Eu sei como abrir um arquivo como somente leitura se o emacs / vi / vim já estiver em execução.

Nifle
fonte
Nota: se você não tiver permissão de gravação no arquivo, o Vim, por padrão, o abrirá no modo somente leitura. Na verdade, acho que é mais fácil controlar a permissão do arquivo do que fornecer uma maneira "somente leitura".
Franklin Yu

Respostas:

45

Para o emacs:

emacs FILE --eval '(setq buffer-read-only t)'

Não há opção de inicialização para forçar somente leitura.

Editar:
se você colocar esta pequena função no script de inicialização do shell (.bashrc, por exemplo), poderá abrir um arquivo somente leitura, digitandoev file_to_view

ev() {
  emacs "$1" --eval '(setq buffer-read-only t)'
}
Trey Jackson
fonte
11
Eu gostaria de poder rebaixar o emacs para isso.
Robert Calhoun
145

vim -R nome do arquivo

RedGrittyBrick
fonte
4
Funciona muito bem, mas aceitei a resposta de Trey porque prefiro o emacs ao vim #
Nifle
32
E todos os usuários do vim se vingam, votando acima para mais do que a "resposta aceita": D
Xosofox 11/11/15
1
Nota: algumas caixas parecem ter o comando 'view', talvez com o apelido de 'vi -R'.
armyofda12mnkeys
26

ver nome do arquivo

Basicamente vim no modo somente leitura; simples!

Como sugerido pelo comentário, caso viewesteja vinculado a plain vi, aqui estão os comandos bash para primeiro inspecionar a situação e depois corrigi-la:

# non-destructive inspection
which vim
which view
ls -l $(which view)

# overwrite current view with symlink to vim, requires root
ln -sfv $(which vim) $(which view)
mrverrall
fonte
1
Nenhuma sintaxe destacada embora.
Nifle 28/10/10
7
@ Nifle: Não deve haver nenhuma diferença no realce da sintaxe. Se você vimpossui realce de sintaxe, mas viewnão, talvez viewseja um link para uma versão mínima do vimque não tenha realce de sintaxe compilado. Compare as saídas do :versioncomando.
garyjohn
1
Razão pela qual "simplesmente funciona": o Vim realmente lê argv[0]para decidir seu comportamento. É um truque comum; Às vezes, o AFAIK GCC e Bash também fazem isso.
Franklin Yu
10
vim -R <file>

permite escrever com :w!

vim -c ":set nomodifiable"  <file>

Impede que o usuário faça alterações no arquivo no buffer. Mas o usuário pode tornar o buffer modificável com:set modifiable

Você poderia usar

vim -c ":noremap q :q<cr>" -c ":map : <Esc>" -c ":set nomodifiable" <file>

para impedir que o usuário desative o "nomodificável" e permita que o usuário saia pressionando q. Mas, então, o usuário não pode entrar no modo de comando, o que pode ou não ser o que você deseja.

Você também pode abrir o arquivo com o comando less:

less <file>

Para visualizar o arquivo em um ambiente semelhante ao vim, mas sem a capacidade de alterar o arquivo.

Jay
fonte
+1 para usar less, embora como @nxdrvr aponte, você pode pressionar a tecla v para abrir o arquivo no modo editável emvi
Sheharyar
9

Pequeno acompanhamento para a resposta aceita: você pode usar o alias no shell para reduzi-lo a um único comando. Por exemplo, no bash, você pode colocar o seguinte no seu .bashrc:

emacsro() {
  emacs $1 --eval '(setq buffer-read-only t)'
}

(conchas diferentes terão formatos diferentes para fazer isso, mas você entendeu)

Eu adicionaria isso como um comentário em resposta à resposta aceita, mas não parecia possível ter um bloco "código" de várias linhas em um comentário e (no bash de qualquer maneira) o código acima realmente precisa ser em 3 linhas separadas.

Chirael
fonte
6

Para visualizar apenas o arquivo sem a capacidade de editar:

cat <file> | less

Em lessvocê pode ir para "editar modo de arquivo" pressionando a vtecla Mas você não pode editar a entrada padrão; portanto, canalizar a saída cat <file>para menos, para lessde ir para o modo 'editar' pressionando 'v'.

Para vim, a mesma abordagem

cat <file> | vim -
nxdrvr
fonte
4
Obrigado pela vsugestão. Bacana.
tshepang
2
+1, mas não é necessário cat. Apenas use <FILENAME less.
Sparhawk
@Sparkhawk, <file> lessdaria um erro, suponho que você quis dizer less <file>, mas, conforme explicado na resposta, ao usar lessdiretamente, o usuário pode pressionar a tecla v e entrar no modo de edição. Tubulação catpara lessimpedir que isso aconteça.
Sheharyar
@Sheharyar Ele quis dizer redirecionamento de saída. Talvez você esteja mais familiarizado com less < FILENAME, o que lhe dá "Não é possível editar a entrada padrão" quando você pressiona V . Da mesma forma com Vim: vim - < FILENAME.
Franklin Yu
4

Para o emacs, você também pode usar o modo de exibição .

emacsclient --create-frame --eval '(view-file "/tmp/EXAMPLE")'

ou alternativa dentro de um terminal:

emacsclient --nw --eval '(view-file "/tmp/EXAMPLE")'

Ou você pode usar meu script wrapper


fonte
1

No emacs você pode fazer

emacs FILE -f view-mode

O realce da sintaxe é aplicado. Ele não abre apenas o arquivo como um buffer somente leitura. Alguns comandos, como a pesquisa I, são acessíveis sem a tecla Control neste modo.

jogama
fonte
0

enviar um arquivo para fora do padrão, pode ser aceitável, dado o tamanho do arquivo

cat <file>  # dump whole file to stdout
head <file> # view the first few lines
tail <file> # view the last n lines
Nathan Feger
fonte
0

Não vou discordar para que ninguém responda aqui, mas gostaria de acrescentar mais informações sobre o Read-only Modearquivo. De acordo com a documentação detalhada Modo somente leitura Às vezes, você deseja examinar um arquivo, mas deseja protegê-lo contra pressionamentos e alterações de teclas inadvertidas. (Você pode chamar um arquivo longo para praticar os movimentos do vi ou pode rolar através de um arquivo ou programa de comando). Você pode inserir um arquivo no modo somente leitura e usar todos os comandos do movimento vi, mas não poderá alterar o arquivo.

Para examinar um arquivo no modo somente leitura, digite:

$ vi -R file

ou:

$ view file

(O comando view, como o comando vi, pode usar qualquer uma das opções da linha de comandos para avançar para um local específico no arquivo.) Se você decidir fazer algumas edições no arquivo, poderá substituir o modo somente leitura por adicionando um ponto de exclamação ao comando write:

:w!
or:

:wq!

Se você tiver algum problema ao escrever o arquivo.

Para mais ref aqui

Md Haidar Ali Khan
fonte