2013-12-17 4 views
43

mi collego al computer remoto con ssh [email protected]. Quando devo aprire un file nella macchina remota me, ad esempio,Qual è il modo migliore per aprire i file remoti con emacs e ssh

emacs /usr/share/nginx/html/index.html

e che apre il file index.html nel guscio. Ho notato che alcuni comandi di emacs funzionano ma altri non funzionano. Ad esempio, C-w non funziona; M-< non funziona. Come posso risolvere questo problema e qual è il modo migliore per lavorare con emacs e ssh?

Ho trovato this question ma mi ha reso più confuso.

+1

Quali sono alcuni esempi di comandi che funzionano? (A volte sul computer remoto esistono diverse combinazioni di tasti: controlla il tuo file .emacs sulla macchina remota - e talvolta un'intera chiave funziona in modo diverso - ad esempio, la schermata GNU assorbe per default [la parte Ctrl-A di un comando] (http://superuser.com/questions/422126/remap-ctrl-a-in-gnu-screen) prima che possa arrivare a emacs.) – kbshimmyo

+1

C-space, CF, Cg work – Zeynel

+0

Non ho trovato il file .emacs nel telecomando macchina ora ma so che non ho creato nessun nuovo collegamento chiave nell'altra macchina. – Zeynel

risposta

87

io in genere preferisco aprire i file remoti da un'istanza Emacs locale.

Durante l'esecuzione di Emacs sulla vostra macchina locale , l'apertura di un file remoto tramite ssh non è molto diverso da quello di aprire qualsiasi altro file oltre ad un po 'different syntax.

Per ssh, è possibile digitare C-x C-f. Ora, nel minubuffer si desidera digitare /ssh:[email protected]:/path/to/file (nota che il completamento della tabulazione funzionerà non appena si inizia a digitare un percorso. Si noti inoltre il carattere iniziale /). Vedi il completo docs here.

Nel tuo esempio, che sarebbe:

C-x C-f /ssh:[email protected]:/usr/share/nginx/html/index.html 

Ora è possibile modificare i file remoti tramite ssh in Emacs mentre si utilizza la configurazione locale e tutti i pacchetti installati, ecc ...

+14

OP potrebbe essere interessato a sapere che questa funzionalità è chiamata: 'tramp' ed è una delle cose più utili che tu possa mai usare. Compila anche da remoto! – pmr

+0

Funziona alla grande e tutti i comandi sembrano funzionare, ma vedo che non mi permetterà di modificare 'index.html' perché dice che il buffer è di sola lettura. Ma posso modificare lo stesso file se apro sul computer remoto. A proposito, quando ho aperto il file con 'C-x C-f/ssh: user @ host filename' mi ha chiesto la password. – Zeynel

+0

Ho provato un altro file dalla directory Documenti e ho potuto modificare quello senza problemi. – Zeynel

18

Giusto per aggiungere alla risposta di cui sopra, è possibile scrivere le scorciatoie per le macchine che si usano di frequente :

(defun connect-remote() 
    (interactive) 
    (dired "/[email protected]:/")) 

si aprirà una buf dired fer su una macchina remota. Puoi navigare su questo buffer come se fosse un locale.

Se sono state impostate le chiavi ssh per la macchina remota, non è nemmeno necessario inserire la password.

Se si dispone di un gruppo di macchine remote, è possibile assegnare un nome riconoscibile a ciascuna funzione, ad es. connect-cupcake, connect-kitkat e utilizzare il pacchetto smex per il completamento.

+0

Questo è ottimo. Lo proverò. Hai anche una risposta alla domanda che ho posto nel commento sopra: posso modificare questo file '/ usr/share/nginx/html/index.html' se lo apro nel computer remoto; ma quando lo apro con ssh, 'index.html' è di sola lettura. Perchè è questo? – Zeynel

+0

Suppongo che tu non ti stia connettendo con l'utente root e di solito solo lui può scrivere in '/ usr/share /'. –

+0

ma come si connette come utente root? Ho provato alcune cose come 'C-x C-f/sudo ssh: utente @ nomefile host ', ma non funziona. – Zeynel

13

e di aggiungere a @ post di abo-abo di "scorciatoie" -

Usa Emacs segnalibri. È sufficiente creare normalmente dei segnalibri quando si visita un file o una directory remota. Quindi usa semplicemente C-x r b per passare a un segnalibro remoto, il cui nome fornisci (con completamento).

Se si utilizza Bookmark+, i segnalibri remoti vengono evidenziati in modo speciale nello *Bookmark List*, in modo che sia possibile riconoscerli più facilmente. E i segnalibri remoti a cui è necessario accedere da su o sudo (root) sono evidenziati in modo diverso.

Se si utilizza Dired+, è inoltre possibile aggiungere rapidamente più segnalibri a file o directory remoti, visitando la loro directory remota contenente in Dired, contrassegnandoli e premendo C-x b. Non c'è bisogno di dare i nomi dei segnalibri; prendono il nome dai file. Anche se non utilizzi mai quei segnalibri per navigare nei file remoti, puoi usarli con Segnalibro +tags per organizzare i file e quindi operare su sottoinsiemi di essi.

Se si utilizza Icicles allora ogni volta che si utilizza un comando per passare a un segnalibro, è possibile restringere i candidati di completamento a quelli che sono remote colpendo [email protected] durante il completamento.

3

una risposta semplice che si concentra sulla macchina remota:

Se ho intenzione di fare tutti i miei emacs lavorare sulla macchina remota, io uso

ssh -X [email protected] 

e quindi eseguire emacs nella sessione remota, visualizzazione sul mio computer locale. È una vecchia domanda, ma ho voluto lanciarlo per completezza. Certo, ci sono alcuni problemi di configurazione xhost/X, ma in molte reti questo funzionerà subito!

1

SSH mode for emacs è quello che stai cercando.

Una volta che lo avete configurato basta eseguire

M-x ssh RET hostname RET 

Poi vi verrà richiesta la password per due volte (una volta per la riga di comando, una volta per il caricamento dei file).

Per la maggior parte è possibile trattarlo come qualsiasi altra shell (non interattiva e alcune differenze minori, ma il gioco è fatto).

Tiene traccia della directory in cui ti trovi, quindi quando vuoi aprire un file dalla directory che stai guardando inizia automaticamente nella directory giusta e devi solo inserire il nome del file.

Emacs Wiki ha anche più informazioni.