Comment puis-je ouvrir un fichier en lecture seule à partir de la ligne de commande avec emacs / vi / vim

79

Existe-t-il un moyen de dire à emacs / vi / vim (à partir de la ligne de commande) que je souhaite afficher le fichier dans view-modeou read-only.

Je sais comment ouvrir un fichier en lecture seule si emacs / vi / vim est déjà en cours d'exécution.

Fusil
la source
Remarque: si vous n'avez pas le droit d'écriture sur le fichier, Vim l'ouvrira par défaut en mode lecture seule. En fait, je pense qu’il est plus facile de contrôler l’autorisation de fichier que de fournir une méthode «en lecture seule».
Franklin Yu

Réponses:

45

Pour Emacs:

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

Il n'y a pas d'option de démarrage pour forcer la lecture seule.

Edit:
Si vous mettez cette petite fonction dans votre script de démarrage du shell (par exemple, .bashrc), vous pouvez ouvrir un fichier en lecture seule en tapantev file_to_view

ev() {
  emacs "$1" --eval '(setq buffer-read-only t)'
}
Trey Jackson
la source
11
J'aimerais pouvoir réduire le nombre d'emacs pour cela.
Robert Calhoun
145

vim -R nom de fichier

RedGrittyBrick
la source
4
Ça marche très bien, mais j'ai accepté la réponse de Trey parce que je préfère emacs à vim
Nifle,
32
Et tous les utilisateurs de vim se vengent en votant plus haut que la "réponse acceptée": D
Xosofox
1
Remarque: certaines cases semblent avoir la commande "view", peut-être des alias "vi -R".
armyofda12mnkeys
26

voir le nom du fichier

Fondamentalement vim en mode lecture seule; simples!

Comme l'indique le commentaire, dans le cas où il viewest lié à plain vi, voici les commandes bash pour inspecter d'abord la situation, puis la résoudre:

# 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
la source
1
Aucune syntaxe en surbrillance cependant.
Nifle
7
@Nifle: Il ne devrait y avoir aucune différence dans la coloration syntaxique. Si votre vimmise en surbrillance de la syntaxe viewn'est pas la vôtre , il se peut que votre viewlien avec une version minimale vimne contienne pas de mise en évidence de la syntaxe compilée. Comparez les résultats de la :versioncommande.
garyjohn
1
Raison pour laquelle cela "fonctionne": Vim lira argv[0]pour décider de son comportement. C'est un truc commun. Pour autant que je sache, parfois GCC et Bash le font également.
Franklin Yu
10
vim -R <file>

permet d'écrire avec :w!

vim -c ":set nomodifiable"  <file>

Empêche l'utilisateur d'apporter des modifications au fichier dans la mémoire tampon. Mais l’utilisateur peut rendre le tampon modifiable avec:set modifiable

Vous pourriez utiliser

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

pour empêcher l'utilisateur de désactiver le "nomodifiable", et lui permettre de quitter en appuyant sur q. Mais, alors l'utilisateur ne peut pas entrer du tout en mode commande, ce qui peut être ou ne pas être ce que vous voulez.

Vous pouvez également ouvrir le fichier avec la commande less:

less <file>

Pour afficher le fichier dans un environnement semblable à vim mais sans possibilité de le modifier.

Geai
la source
+1 pour l’utilisation less, bien que, comme le souligne @nxdrvr, vous pouvez appuyer sur la touche v pour ouvrir le fichier en mode vi
éditable
9

Petit suivi de la réponse acceptée: vous pouvez aliaser cela dans votre shell pour le réduire à une seule commande. Par exemple, dans bash, vous pouvez mettre ce qui suit dans votre .bashrc:

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

(différents coquillages auront différents formats pour le faire, mais vous voyez l'idée)

J'aurais ajouté ceci en tant que commentaire en réponse à la réponse acceptée, mais il ne semblait pas possible d'avoir un bloc "code" multiligne dans un commentaire, et (en bash de toute façon) le code ci-dessus doit vraiment être sur 3 lignes séparées.

Chirael
la source
6

Pour visualiser un fichier sans possibilité d’édition:

cat <file> | less

En lessvous pouvez aller en "mode fichier" en appuyant sur la vtouche. Mais vous ne pouvez pas éditer l'entrée standard, aussi, si vous redistribuez la sortie de cat <file>moins, vous ne pourrez pas lesspasser en mode "édition" en appuyant sur "v".

Pour vim la même approche

cat <file> | vim -
nxdrvr
la source
4
Merci pour la vsuggestion. Chouette.
Tshepang
2
+1, mais pas besoin de cat. Il suffit d'utiliser <FILENAME less.
Sparhawk
@Sparkhawk <file> lessdonnerait une erreur, je suppose que vous vouliez dire less <file>, mais comme expliqué dans la réponse, lorsqu'il utilisait lessdirectement, l'utilisateur pouvait appuyer sur la touche v et passer en mode édition. Tuyauterie catpour lessempêcher cela de se produire.
Sheharyar le
@ Sheharyar Il voulait dire la redirection de sortie. Peut-être vous êtes plus familier avec less < FILENAME, ce qui vous donne « Impossible de modifier l' entrée standard » lorsque vous appuyez sur V . De même avec Vim: vim - < FILENAME.
Franklin Yu
4

Pour emacs, vous pouvez également utiliser le mode d'affichage .

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

ou alternative à l'intérieur d'un terminal:

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

Ou vous pouvez utiliser mon script wrapper


la source
1

Dans Emacs, vous pouvez faire

emacs FILE -f view-mode

La mise en évidence de la syntaxe est appliquée. Il ne suffit pas d'ouvrir le fichier en tant que tampon en lecture seule. Certaines commandes, telles que I-search, sont accessibles sans la touche de navigation dans ce mode.

jogama
la source
0

l'envoi d'un fichier sur std out, peut être acceptable compte tenu de la taille du fichier

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

Je ne vais pas discuter à quiconque réponse utilisateur ici, mais je voudrais ajouter plus d'informations sur le Read-only Modefichier. Selon la documentation oreilly Mode lecture seule Il arrivera parfois que vous souhaitiez consulter un fichier, mais que vous souhaitiez protéger ce fichier des frappes et des modifications involontaires. (Vous souhaiterez peut-être appeler un fichier volumineux pour s'exercer à effectuer des mouvements de vi, ou faire défiler un fichier de commande ou un programme). Vous pouvez entrer un fichier en mode lecture seule et utiliser toutes les commandes de mouvement de vi, mais vous ne pourrez pas modifier le fichier.

Pour regarder un fichier en mode lecture seule, entrez soit:

$ vi -R file

ou:

$ view file

(La commande view, comme la commande vi, peut utiliser n’importe quelle option de ligne de commande pour accéder à un emplacement spécifique du fichier.) Si vous décidez d’apporter des modifications au fichier, vous pouvez remplacer le mode lecture seule par ajout d'un point d'exclamation à la commande write:

:w!
or:

:wq!

Si vous rencontrez un problème pour écrire le fichier.

Pour plus de ref ici

Md Haidar Ali Khan
la source