用 SSH 登錄伺服器用 Vim 在線寫 PHP 代碼的體驗是怎樣的?

好像一些頂級大公司開發web程序就是這樣的,

例如谷歌,Facebook 之類的。

他們都不在本地寫代碼

聽說國內也有公司這麼干,區域網伺服器,大家把代碼都寫裡面,也down不下來,安全


先ssh遠程登錄伺服器


然後在線用vim寫代碼,例如php


直接本地瀏覽器訪問調試


看起來很牛B的感覺,想問下

這種寫代碼方式體驗如何?


這種方式比在本地開發後上傳有何優勢?


版本同步問題如何解決???


國內這麼開發的公司多嗎??


具體詳細的開發流程是怎樣的?


我在本地想學習下這種開發方式如何學習?搭建個虛擬機裝個centos就行了嗎,

需要什麼伺服器或客戶端軟體?


先說個不好聽的:所有vim不vim的,都沒抓住這個問題的本質關鍵!!

這裡的關鍵是:在「伺服器上寫代碼」,而不是「用vim寫代碼」。


採用這類開發方式的公司,一般都是工具鏈比較完善的,又或者是採用模塊式開發的,子系統不能跑在本地跑的。要說安全,也是一個理由,但這個理由相當牽強,就算把淘寶的代碼全部送給你,你也搞不出另外一個淘寶的。代碼本身是不值錢的,值錢的是對業務的支持(純技術公司,開發OS的公司,開發小型硬體的公司除外)。


只有當在伺服器上寫代碼的成本,比在本地上寫要小,才有必要部署這麼一套系統,不然就是裝B浪費錢。這裡可以從幾個淺而易見的成本入手。
1, 編譯成本。做一個修改,如果要等2分鐘編譯,就很噁心了。但如果部署了分散式編譯系統,把編譯時間變成5秒,情況就很不一樣。
2, 開發的模塊依賴於另外一個不能在一個機器上跑的服務,例如搜索服務。
3, 重裝配置環境的成本。碼農們最不喜歡的「重裝」,「配置」。採用在伺服器上開發,支撐系統的管理員就可以很方便地對工具鏈進行維護,升級。想想,你進入一個新項目,直接伺服器上就可以立馬開干,代碼在伺服器編譯運行,不用本地配置,是不是很爽啊!!

所以,有這種需求的,一般來說都是比較成型的相對不小的公司。


好,問題回到「如何在伺服器上寫代碼」上。

適應vim的用vim,適應emacs的用emacs,喜歡IDE的可以想辦法直接編輯伺服器上的文件(例如開samba)。


既然講體驗,那我就說說自己的體驗吧。正在實習,是法國一家為各種硬體供應商比如sumsung 等提供硬體開發部署IDE的,就是軟體開發公司,//這是背景

=====

開發環境是區域網伺服器,centos,本地是各種windows,從xp到win10都有。。我很想吐槽為啥還有xp。。。而且系統賬號能在xp win7、8、10上通用我感覺是很牛逼的。。。

本地windows環境可以聯網,但只有瀏覽器,pdf閱讀器,office套裝和nodepad++,還有一個連伺服器的軟體叫NX client。開發人員的賬號是沒有安裝軟體的許可權的,不過自己測試綠色版軟體是可以用的。想要裝程序也可以申請,SA會給你裝,問題也不大

作為實習生,開發環境是centos 6.5,不可聯網,通過NXclient連接,有圖形化界面(操作手感類似在host系統上用虛擬機)初始化賬號的時候可以選擇是選擇gnome桌面或kde桌面,裡面公司所需要的開發環境配齊了,IDE主要是eclipse和公司內部自己的IDE,文本編輯器,只有原生的vim和gvim,沒錯連gedit都沒有,甚至連pdf閱讀器這些都沒有。。。代碼提交使用svn提交到公司的代碼倉庫,由測試人員測試。連接速度由於是區域網,基本無延時,而且速度很快。
實習生的賬號許可權是不能在win和linux里ssh的,但是帶我的技術主管是可以的,所以我需要下載什麼文件之類的,要郵件發給帶我的人,然後他給我放到/tmp里我才能用

所以寫代碼的時候,java 就用eclipse寫了,其他的都是拿vim來寫,體驗就是vim使用日趨熟練,因為根本沒得選。。。另外這種登錄到區域網伺服器的開發環境上,有圖形界面,操作也不是大問題。但是很多東西都得用命令行去執行,因為根本沒裝圖形客戶端;還有一個好處就是下班了,直接退掉NX客戶端關閉windows就行,linux里的都不用關,下次打開就是上次退出連接的樣子,不管用的哪一台電腦,連接上你的開發環境就可以繼續工作。

最後吐槽一句法語鍵盤真尼瑪難用。。。


其實也可以sshfs,把伺服器的文件映射到本地。這樣就可以用本地IDE去編輯。


jetBrains的IDE都有sftp的功能。寫完點個同步就行。


我邊上那隻魚現在放著workstation不用喜歡用筆記本ssh過去用vim寫java……效率比我用intellijIDEA還高!所以這事還是要看熟練度。


Vim很強大的,很多插件和快捷鍵,如果使用熟練的人,比在window下編程還方便。


還不錯 當年寫的是java和js 因為build環境本地沒有。體驗就是和本地開發一樣 但是ubuntu和centos目錄部分不一致有點鬧心。

內網環境 一點不卡 電腦上什麼也不用裝 一個半透明終端搞定。

敞亮。

當時命令行的svn也是這麼學的 包括命令行diff 時間久了 linux也就挺熟練了。

而且手機也能幹活了…

而且後來換了mac 基本是無縫對接的…


不知道樓主有沒有用過SSH……

我在DigitalOcean上的VPS,就用SSH連接來管理,搭了Web伺服器和VPN,比Dreamhost的伺服器的訪問速度快很多,但是SSH使用的時候仍然會卡頓,如果你體驗過,那就不用多說了,哪怕偶爾的卡頓,也會嚴重影響寫代碼的快感。一般的管理也就忍了,讓我SSH遠程寫代碼,別說用vim了,就是vimmmmmmmmmmm也不會爽的。

如果你說你連的區域網內的伺服器,SSH延遲基本無,那其實也沒啥可說的,只是這種脫了褲子放屁的事,只能讓比你low的人覺得high……可裝這種逼也沒啥意義,比你low的人,還對他們裝毛線。

用SSH遠程寫代碼不是不可以,但就個人經驗來說,都是在修改一點點代碼或者對配置文件進行小量修改的時候才會這樣,這樣的目的是因為要修改的東西不多,懶得在本地搞完再傳罷了。

喜歡VIM以及黑框框編程的快感,就老老實實裝個Linux或者換個Mac,寫完代碼push到上級伺服器。


這麼做最大的一個反人類的體驗是如果開會拿著筆記本離開網路的話,之前建立的 ssh session 很可能就不能恢復了,所有你打開的 log、Vim session、輔助信息等很可能都得重新開一遍。有時候網路環境不穩定,在編輯中的文件若沒保存,ssh session 忽然斷掉了,你就只好自扇耳光並感嘆命運不公了。

/*
光吐槽不提出解決方案是不夠意思的。有很多童鞋針對這個問題提到了一些不錯的解決方案:tmux、screen、autossh、mosh、nohup 等。多謝大家的提醒,學習了。其中 tmux 我比較熟悉。如果公司方面在開發伺服器上安裝了 tmux 包並且配置、運行了 tmux server 的話,在網路斷掉再恢復連接後,你可以再連到遠端的 tmux server 上,它是保存了上次斷掉之前的所有狀態的。

不過也是會存在一定的風險 tmux server 丟掉這些信息的,特別是在很多人同時連接到一個 tmux 伺服器上,而你又中途斷掉連接很久時。
*/

養成良好習慣,平時敲完一段就 :w 一下,非常重要——這關係到了你能否常陪老婆孩子,家庭是否和睦,世界是否和諧,以及美國鍾情局碼農是否會調用平時自己埋下的後門 Fortran 函數核爆太陽系。

另外一個缺點是,平時只會用 IDE 來編碼的童鞋在這種公司裡面會感到一種舉世皆醉我獨醒的孤獨感,高處不勝寒。

這麼做的好處當然也不少。比較重要的一點是,有了一個集中管理 ssh session 的跳板機,誰做了什麼,誰沒做什麼,只要 boss 樂意,都是可以反查到的,對於企業而言安全不少。而且,使用公司一直在線的伺服器,程序員在外網的時候可以通過 VPN 連接到公司內網,便於緊急事故處理(和加班)。另外一個潛在的優點就是,如果統一了開發工具鏈,開發工作上也能夠方便管理,不過這個一般不現實,每個程序員有自己的喜好,一般都是會有各自的賬號讓他們自己去配置。

下面認真地解答題主的一些疑問。

這種寫代碼方式體驗如何?

取決於公司網路情況,大家熱愛開會的程度,你工位離 WI-FI 熱點的距離,以及最重要的,你自己對於手頭上的 Vim、PHP 等相關開發工具的理解程度及品味高低。沒有自己一直在迭代的 dotfiles 的此類開發人員一般會覺得體驗不好。如果公司統一了工具鏈,則體驗取決於大家使用的統一環境下的工具鏈的配置人是否自己寫過代碼。

這種方式比在本地開發後上傳有何優勢?

你再也不可能說在我的機器上是正常的這樣的話了。開發機不在自己身邊的時候可以 VPN 到內網緊急修 Bug 了,所以你的周末會變的很充實。另外,你也不用在自己的本地機器上搭建代碼運行所依賴的基礎服務。等等。

版本同步問題如何解決???


Git、SVN、CVS 等。也有人利用 linux 文件系統的可靠性達到了無版本管理勝有版本管理,境界高。

國內這麼開發的公司多嗎??


挺多的。不過也有公司利用類似於 Vagrant 這樣的工具,讓程序員們利用統一配發的打包好的虛擬機文件在本地開發。

具體詳細的開發流程是怎樣的?


情況有很多種:

1. 需求來了,分析需求,需求很無腦,駁回需求,傻笑。
2. 需求來了,分析需求,需求很贊很被需求,開始開發。提出技術實現方案,ssh 連接至跳板機,在跳板機上 ssh 連接到開發機,在開發機上進入代碼所在處,打開 Vim 開始寫代碼,寫完了,傻笑。

我在本地想學習下這種開發方式如何學習?搭建個虛擬機裝個centos就行了嗎,

需要什麼伺服器或客戶端軟體?


學習這種開發方式的最好方式是加入一家用這樣的方式進行開發的公司,這是一個在所有方式中效率最高的方式。然後,接近那個構建這種開發模式的同學,傻笑。


希望解答了題主的疑惑。


好像我經常這麼干,因為不是專職的phper啦,偶爾趕時間做點簡單的東西,或者一些維護工作,懶得搭環境啦。
同意某匿名用戶的答覆,如果不是很特殊的情況,抓住應該立刻開除-_-||


在最初的一年多里,我就是這麼乾的
Shell + PHP + JS + HTML + CSS 全部遠程vim編輯

當時的情況
1、網路還不錯,延時&<50ms
2、整個項目只有我一個人
3、非核心業務,生產環境就是開發環境

最大的感覺是極大地滿足了初學者的裝逼需求
把xshell調成半透明,背後放張星空的圖片,用vim多窗口模式編輯一塊塊紅紅綠綠的文本
和旁邊同事用白底zend studio的界面形成鮮明的對比,想想就覺得很爽
真正一根網線一台電腦可以辦公,不用搭建什麼本地環境,過年回家裝個終端就可以處理問題
需要記完整的函數名,記得你整個項目的組織結構,因為沒有代碼補全和跟蹤功能,不過我覺得記記更健康

調試靠瀏覽器運行,命令行運行,echo輸出和錯誤日誌,熟悉的話效率也不低

這樣做的優勢就是省去了整個部署環節
包括版本控制,開發、生產環境的差異造成的不一致,數據同步問題
因為根本不需要發布

問題也是相對的,沒有版本控制,備份回滾基本靠手,不過一般都是一路往前的
另外一點,直接用vim寫代碼,很容易有不嚴謹的地方,產生很多waring和notice,這點用IDE能很好的避免。如果你能用vim寫代碼而放在IDE中檢查燈全綠的話,又是另一種成就感了

不過現在不這麼幹了,多人協作的時候,不能只顧自己爽。建立完善的版本控制、測試、發布流程,才是更穩妥的做法

想自己體驗這種方式的話,就如你所說,在虛擬機中,裝個centos
然後裝上 PHP + Nginx / Apache + Mysql
在宿主機用SSH終端連接就好了
自己裝環境也是一種樂趣呢 : ) 完


有時為了應急也這樣干過,我御用的是Emacs。
除了使用Git等版本控制外,如果你非要直接編輯伺服器文件,其實還有種東西叫做sftp,在Linux下一行sshfs命令就能Mount上去。

在Windows,如下圖:

要說安全,我代碼都給你改了,還有什麼安全可言?
主要還是考慮到環境的部署問題吧。


很多人一開始就這樣的哈哈


我們廠就是這樣的,一個一個筆記本,然後一人分個開發機。筆記本上就裝個office全家桶,xshell,百度hi。編碼都是在開發機上的。中間有個跳板機,所以用不了scp和sftp


你試試延時上200寫代碼的感覺
或者等效感受延時800玩DOTA


Git干毛用的?Server上最多臨時調試下,哪個S×在遠程伺服器上寫代碼?
本地是win還是linux? 為什麼不本地寫? 遠程卡的要死!

利益相關:每天在本地寫完代碼然後push到遠程server上的碼農,哦,對了,用vim寫


我好像也可以說一下我的體驗。
我們公司沒有這種要求,而可能我這個人比較作,我才自己給自己增加了難度。首先申明的是,我寫的不是php,我寫的c,不過感覺應該是差不多的。
我在公司有台式機,也有筆記本,還有一台mac。台式機是linux,筆記本是win。我是寫分散式的,所以一般筆記本都是用來做編輯工作,台式機才是本地的測試機。我當然把代碼也給放到台式機刪了,這樣的話,條件就和題主的差不多了。
首先是vim。因為連接上去是字元界面,所以只有vim或者是emacs選擇。我倒是都可以用,不過首選還是vim。使用vim的話,編輯c還是挺方便的。插件裝上再加上你順手的配置文件,簡直就是帶你裝逼帶你飛的感覺。
其次是在這種工作環境下,我覺得tmux是必備的。每次下班回家,直接合上機器就走人,明天來了ssh上去tmux還是昨天離開時候的樣子,如果你在調試的話,gdb還是在那個斷點那裡。這點非常方便。這點不僅僅是離開的好處,對於網路不好的情況,一樣很受用。不管網路怎麼斷,你的工作環境一直都在。
這樣子的編程我已近有5年了,2年前我入手了一台mac,折騰了很久,我實在很不爽mac的這種封閉的機制,所以使用vagrant掛載了一個linux。我現在在mac裡面也是ssh到本地的linux上去玩的。mac對我來說自是一個漂亮的界面用來上上網,體驗體驗下班合上機器就走人的感覺。
主要還是看你能不能脫離ide吧。如果你是一個嚴重的ide依賴症患者,那這種感覺就簡直了。我以前是寫c#的,使用的vs,vs這種ide簡直就是神器中的神器啊。突然換到vim,當初也是很不適應,慢慢的習慣了就好。
不過現在很多人玩字元界面純粹可能就是為了炫酷嘛。我也有這種癥狀,裝逼這種事情不裝一個金燦燦的,還要裝一個60分的就不好玩了!


曾經有好幾年都這麼干。

原因很簡單,剛開始要寫大量shell,沒有什麼好的跨平台IDE可以用,vim是我最愛而且直接在終端的文本模式下就可以有很不錯的高亮支持。考慮到我在windows下也是用vim,搬回來再ftp回去貌似沒有這個必要。配合screen可以放心的隨時關機不擔心會話丟失,下班寫到哪兒,第二來了繼續寫。不用去想昨天開了哪些文件。配合別人以及自己的插件幾乎啥都能幹,自動加註釋、Lint檢查,調整格式……

簡單說就是方便而已。

寫了一年多shell後開始寫C++了,出於慣性以及當年對微軟的偏見,依然用vim(當然還有cscope等插件)寫了一年多代碼。

直到有一段時間因為業務需要,維護了一陣子基於MFC的程序(之前都是Linux下純服務程序),發現配合viemu和visual studio assistant的Visual Studio居然如此好用!

從此很少再這麼干。當然也不是完全不用。畢竟Visual Studio和幾個插件都是花錢的,而且安裝起來不簡單。所以在家和別人機器上依舊用vim。

後面改用Java後用IntelliJ Idea了。

好的IDE確實很方便,但是對我來說,也許只有重構功能在vim或者emacs下還沒有搞定的。什麼語法高亮,自動補全,符號跳轉,編譯跳轉,快捷鍵早就用得爛熟。

上面有人說網路延遲,我司深圳和南京的伺服器,印象中也就是10ms~20ms之間。從來沒覺得對手感有啥影響。跨國的伺服器時延大,確實是折磨。

有人說裝逼就偏激了,自己用不慣就覺得愛用的人是裝逼。就像不愛吃辣的人覺得愛吃辣的人是裝逼一樣。


預測一大波美團同行正在趕來,不知道他們的前端nodejs改造成功了沒


是說像這樣嗎? 不要對那些鍵盤噼里啪啦響,黑色背景綠色字充滿多餘的羨慕, 不方便,不好用,代碼多了很麻煩! 總之,能直接桌面操作就桌面操作,有IDE就用IDE。

再補充一下,也有本地IDE,透過SSH連到遠程計算機,使用遠程計算機上的代碼和環境的。


推薦閱讀:

Google 的 Android 為什麼不自主開發一個內核而要用 Linux 內核?
一個新手面試 Linux 運維工作至少需要知道哪些知識?
linux/unix socket編程並發時什麼時候用進程(fork),什麼時候用線程(池)?
ssh遠程登陸有時候正常,有時候顯示:ssh_exchange_identification: Connection closed by remote host,這是什麼原因?
魅族會不會考慮 Ubuntu 系統?

TAG:PHP | 後端技術 | 編程 | Linux | Vim |