在emacs中使用go

蓝色科学史 · · 603 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

在emacs中,只加载基础配置。项目配置用脚本加载。go语言使用go-langserverlsp-mode,其他的yasnippet,补全,都是基础功能。
bash <(curl -L -s https://install.direct/go.sh)

;;<for line numbers>
;; if you clipboard don't use well, close numbers, then you can copy and paste
(global-linum-mode 1) ; always show line numbers                                                                                                                                                                                                                              
(setq linum-format "%4d| ")
(setq-default fill-column 80)
;;

;;<for find path backspace>
(global-set-key "\C-h" 'backward-delete-char-untabify)
(global-set-key "\d" 'delete-char)
;;

;; <for copy>                                                                                                                                                                                                                                                                 
;; http://hugoheden.wordpress.com/2009/03/08/copypaste-with-emacs-in-terminal/                                                                                                                                                                                                
;; I prefer using the "clipboard" selection (the one the                                                                                                                                                                                                                      
;; typically is used by c-c/c-v) before the primary selection                                                                                                                                                                                                                 
;; (that uses mouse-select/middle-button-click)                                                                                                                                                                                                                               
(setq x-select-enable-clipboard t)

;; If emacs is run in a terminal, the clipboard- functions have no                                                                                                                                                                                                            
;; effect. Instead, we use of xsel, see                                                                                                                                                                                                                                       
;; http://www.vergenet.net/~conrad/software/xsel/ -- "a command-line                                                                                                                                                                                                          
;; program for getting and setting the contents of the X selection"                                                                                                                                                                                                           
(unless window-system
  (when (getenv "DISPLAY")
    ;; Callback for when user cuts                                                                                                                                                                                                                                            
    (defun xsel-cut-function (text &optional push)
      ;; Insert text to temp-buffer, and "send" content to xsel stdin                                                                                                                                                                                                         
      (with-temp-buffer
        (insert text)
        ;; I prefer using the "clipboard" selection (the one the                                                                                                                                                                                                              
        ;; typically is used by c-c/c-v) before the primary selection                                                                                                                                                                                                         
        ;; (that uses mouse-select/middle-button-click)                                                                                                                                                                                                                       
        (call-process-region (point-min) (point-max) "xsel" nil 0 nil "--clipboard" "--input")))
    ;; Call back for when user pastes                                                                                                                                                                                                                                         
    (defun xsel-paste-function()
      ;; Find oout what is current selection by xsel. If it is different                                                                                                                                                                                                      
      ;; from the top of the kill-ring (car kill-ring), then return                                                                                                                                                                                                           
      ;; it. Else, nil is returned, so whatever is in the top of the                                                                                                                                                                                                          
      ;; kill-ring will be used.                                                                                                                                                                                                                                              
      (let ((xsel-output (shell-command-to-string "xsel --clipboard --output")))
        (unless (string= (car kill-ring) xsel-output)
          xsel-output )))
    ;; Attach callbacks to hooks                                                                                                                                                                                                                                              
    (setq interprogram-cut-function 'xsel-cut-function)
    (setq interprogram-paste-function 'xsel-paste-function)
    ;; Idea from                                                                                                                                                                                                                                                              
    ;; http://shreevatsa.wordpress.com/2006/10/22/emacs-copypaste-and-x/                                                                                                                                                                                                      
    ;; http://www.mail-archive.com/help-gnu-emacs@gnu.org/msg03577.html                                                                                                                                                                                                       
    ))


;; </for copy>                                                                                                                                                                                                                                                                

;; <for ctags>                                                                                                                                                                                                                                                                

;; </for ctags>

所有emacs配置出现问题的原因都是对elisp了解少导致的,emacs的插件源有清华的也有emacs-china的,清华的地址:

(setq package-archives '(("gnu"   . "http://mirrors.tuna.tsinghua.edu.cn/elpa/gnu/")
                         ("melpa" . "http://mirrors.tuna.tsinghua.edu.cn/elpa/melpa/")))

future:
(1)自动安装package,放到自定义目录
(2)项目中创建一个空的.projectile配置文件,当打开一个项目的文件夹后会自动打开响应的lsp后端,开启lsp-mode。

首先安装polipo,然后写配置文件:

#必填
socksParentProxy = "localhost:1080"
socksProxyType = socks5

安装lsp的go语言后端gopls,lsp-mode包括UI之类的提供一套共同的操作,配置不同的后端就可以做成和ide一样:
GO111MODULE=on https_proxy=127.0.0.1:8123 http_proxy=127.0.0.1:8123 go get -v golang.org/x/tools/gopls@latest

安装bingo后端。

go语言补全,跳转,需要的工具参考:
https://blog.yuantops.com/tech/emacs-config-go-dev-environ/

要么多试几次,将包下载下来,要么更改go.mod,增加replace配置,示例如下:

module tx
require github.com/sirupsen/logrus v1.2.0 // indirect
replace (
    golang.org/x/crypto v0.0.0-20180820150726-614d502a4dac => github.com/golang/crypto v0.0.0-20180820150726-614d502a4dac
    golang.org/x/net v0.0.0-20180821023952-922f4815f713 => github.com/golang/net v0.0.0-20180826012351-8a410e7b638d
    golang.org/x/text v0.3.0 => github.com/golang/text v0.3.0
    golang.org/x/sys v0.3.0=>github.com/golang/sys v0.3.0
)

如果过程中卡主了,可以使用nload,回车键切换查看ip流量是否正常。


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:蓝色科学史

查看原文:在emacs中使用go

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

603 次点击  
加入收藏 微博
1 回复  |  直到 2019-12-11 10:03:04
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传