Làm cách nào để chỉnh sửa tập tin từ xa qua ssh?


82

Tôi phải chỉnh sửa một số tệp được đặt trên một số máy chủ mà tôi có thể truy cập qua ssh.

Tôi muốn chỉnh sửa các tệp này theo tùy chỉnh vimtrên máy trạm của mình (Tôi không có quyền thay đổi vimcài đặt trên máy chủ từ xa). Đôi khi tôi muốn chỉnh sửa một tệp bằng sublime texthoặc trình soạn thảo GUI khác.

Tất nhiên, tôi có thể tải xuống các tệp này, chỉnh sửa chúng cục bộ và tải chúng trở lại máy chủ. Có giải pháp thanh lịch hơn?

Câu trả lời:


65

Bạn có thể làm điều này bằng cách gắn thư mục từ xa dưới dạng hệ thống tệp bằng sshfs. Để làm điều này, đầu tiên một số điều kiện tiên quyết:

# issue all these cmds on local machine
sudo apt-get install sshfs 
sudo adduser <username> fuse

Bây giờ, thực hiện quá trình gắn kết:

mkdir ~/remoteserv    
sshfs -o idmap=user <username>@<ipaddress>:/remotepath ~/remoteserv

Sau này, chỉ cần đi vào thư mục được gắn kết và sử dụng vim tùy chỉnh cục bộ của riêng bạn.


4
Không có gì đáng ngạc nhiên, bước cài đặt sẽ thất bại đối với các bản phân phối không debdựa trên cơ sở và do đó không có apt-get. (Trong trường hợp, yumhoặc zyppercó thể có mặt.) Họ cũng yêu cầu root trên máy cục bộ, có thể có hoặc không có sẵn. (Điều này không có nghĩa là đó là một giải pháp tồi, nhưng nó đi kèm với một điều kiện tiên quyết lớn.)
Ulrich Schwarz

4
Được chứ. Tìm ra. Tất cả điều này được thực hiện trên máy cục bộ. Trong trường hợp OS X người ta phải cài đặt osxfusesshfs. Chúng có thể được cài đặt với homebrew ( brew install sshfsbrew cask install osxfuse, hoặc từ các gói thu được từ osxfuse.github.io
lấy cảm hứng từ

95

Bạn có thể làm điều đó thông qua scpnhư thế này:

vim scp://user@myserver[:port]//path/to/file.txt

Lưu ý hai dấu gạch chéo //giữa máy chủ và đường dẫn, cần thiết để giải quyết chính xác đường dẫn tuyệt đối. (Dấu gạch chéo đầu tiên là cú pháp, trong khi dấu gạch chéo thứ hai chỉ định thư mục gốc của người dùng từ xa, như thường lệ. Để bắt đầu tại thư mục chính, bạn sẽ làm [:port]/~/path/to/file.txt.) [:port]Là tùy chọn.

Điều này được xử lý bởi plugin tiêu chuẩn netrw.vim của vim . Một số giao thức khác được hỗ trợ.


6
Có, tệp được truy xuất thành tệp tạm thời, được tải lên máy chủ khi lưu.
FloHimelf

1
Cảm ơn bạn. Tuy nhiên, tôi đã gặp lỗi, khi cố lưu tệp:E382: Cannot write, 'buftype' option is set
Loom

2
Bạn có thể thử :set buftype=""​trong vim.
FloHimelf

2
Hơn nữa, vim sẽ đọc ~/.ssh/configvà giải quyết các máy chủ từ xa với vim scp://[host]/path.
Jangari

2
@stillanoob::e scp://...
FloHimelf

6

Tùy thuộc vào ý của bạn khi bạn nói rằng bạn không có quyền chỉnh sửa cài đặt Vim, có thể có cách sử dụng Vim trên máy chủ theo cách bạn muốn. Nếu bạn không thể thay đổi người dùng của mình .vimrc(ví dụ: vì bạn đang đăng nhập với tư cách là người dùng chung) nhưng bạn vẫn có thể tạo tệp, tạo tệp dưới dạng tệp được gọi, nói Loom.vimrcvà sau đó gọi Vim bằng cách sử dụng -uchuyển đổi:

vim -u ~/Loom.vimrc file_to_edit

Sau đó, bạn thậm chí có thể sử dụng bí danh: alias vim='vim -u ~/Loom.vimrc'sẽ cho phép bạn sử dụng Vim theo cách thông thường và nó vẫn sẽ tải .vimrctệp tùy chỉnh của bạn . Bí danh này sẽ không tồn tại sau khi bạn đăng xuất, vì vậy bạn không cần phải lo lắng về bất kỳ ai khác vô tình sử dụng Vim tùy chỉnh của bạn.


2

Tùy thuộc vào số lượng tệp và loại tệp bạn muốn chỉnh sửa, đây có thể không chính xác là những gì bạn muốn làm ở đây, nhưng tôi nghĩ rằng nó đáng được đề cập. Nếu bạn phải chỉnh sửa tệp trong máy chủ từ xa, nhưng muốn sử dụng mọi thứ bạn có trong trạm làm việc của riêng mình, thì bạn có thể muốn bắt đầu nghĩ đến việc sử dụng một loại hệ thống Kiểm soát sửa đổi nào đó trong máy của mình. Bằng cách đó, bạn có thể sửa đổi các bản sao cục bộ trong máy của mình bằng phần mềm bạn chọn, cam kết thay đổi và sau đó chỉ cần cập nhật các bản sao cục bộ trong máy đích. Bên cạnh việc chỉnh sửa các tệp bằng bất kỳ phần mềm nào bạn cảm thấy thoải mái, bạn có giá trị gia tăng khi có lịch sử thay đổi liên quan đến từng tệp, điều này luôn tốt.

Đây là danh sách các Phần mềm Kiểm soát Sửa đổi , chỉ trong trường hợp.


Bạn có đang đề xuất việc sử dụng một cái gì đó như cam kết các thay đổi git, đẩy nó sang một cái gì đó giống như githubvà kéo các thay đổi từ githubmáy cục bộ của bạn, để thực hiện thay đổi ở đó không?
alpha_989

Điều đó khả thi đối với các thay đổi mã phức tạp .. nhưng đối với các thay đổi mã đơn giản có lẽ .. những gì @FloHimelf hoặc shivams được đề cập là dễ thực hiện hơn ..
alpha_989

1

Để mở rộng câu trả lời của ông Potts: Bạn cũng có thể thực hiện các thao tác trên, sau đó đặt một cái gì đó như thế này vào .bash_profile (hoặc bất cứ thứ gì vỏ của bạn sử dụng):

if [[ "$(who mom loves | awk ' { print $1 }' )" == "Loom" ]]; then 
         alias vim="vim -u ~/.Loom_vimrc"  
         fi  

trong đó Loom là ID người dùng ban đầu của bạn mà bạn đăng nhập như.

Nếu bạn đang đăng nhập như một tài khoản được chia sẻ (và không phải là một tài khoản cá nhân thì sudo su - ing, thì Von Neuman có thể thương xót tâm hồn bạn vì bạn đã mất.

Tôi đã có thể đưa điều này vào một bình luận, nhưng tôi không thể nhận được mã được định dạng ở tất cả.


0

Nếu bạn có một phiên vim đang chạy đã sử dụng

:silent e scp://user@myserver[:port]//path/to/file.txt

Phía :silenttrước sẽ chặn Press Enter to Continuetin nhắn

e scp://user@myserver[:port]//path/to/file.txtExlệnh chế độ để chỉnh sửa tệp ghi chú.

Đã thử nghiệm với BitVise SSHDviệc chạy trên Windows 10 và sử dụng VIM chạy trên Ubuntu 16.04


Chỉ cần lưu ý rằng điều này ngăn chặn việc Press Enter to Continuetải ban đầu, nhưng không phải cho bất kỳ lần tiếp theo nào:w
Sparhawk
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.