让你的Emacs像VS一样方便

emacs-ctxmenu:提供上下文菜单,如右键单击 这是什么? 这是 Emacs 的扩展,提供了右键单击等上下文菜单。 即使您忘记了键绑定,您也可以找到/执行不经常使用的命令。 截屏 安装 如果使用 package.el 2014/02/09 使用melpa 即可使用。 如果使用 el-get.el 2014/02/19 可用。 但是,只有主分支。 如果使用 auto-install.el (auto-install-from-url " https://raw.github.com/aki2o/emacs-ctxmenu/master/ctxmenu.el " ) (auto-install-from-url " https://raw.github.com/aki2o/emacs-ctxmenu/master/ctxmenu-config.el " ) * 在这种情况下,您需要安装以下每个依赖项。 手动 下载 ctxmenu 立即下载

Emacs是强大的文本编辑器之一,尤其是进行程序设计,人们常说:“程序员可以分为三种:使用Emacs的,使用Vim的,以及其他”,可见Emacs在程序员中间的地位。不多废话,直接进入正题。本文介绍了在Ubuntu环境下使用Emacs进行C/C++进行开发的配置方法,通过两天的折腾,配置了一些基本的功能:代码提示/补齐、代码折叠、代码缩进和代码跳转等功能,后续的配置还会继续更新本文章,但仅此三项已经大大提高了开发效率。

配置方法

本文配置是基于Emacs24进行配置的,但配置原理上也支持Emacs23。配置主要用到两个Emacs扩展:CEDET和Auto-Complete。CEDET用于向Auto-Complete提供语义分析,从而向auto-complete提供代码提示支撑。配置方法如下:

  1. 基本概念:

    Emacs在启动的时候会默认加载home目录下的.emacs配置文件,此文件是隐藏文件,如果不存在可手动建立(命令:touch .emacs),建立此文件之后可以使用gedit进行编辑(gedit .emacs)。然后配置信息都写在此文件内。
  2. 开启CEDET

    首先需要开启CEDET,配置如下:
    ;;set the mode enabled
    (setq semantic-default-submodes '(global-semanticdb-minor-mode
                                      global-semantic-idle-scheduler-mode
                                      global-semantic-idle-summary-mode
                                      global-semantic-idle-completions-mode
                                      global-semantic-decoration-mode
                                      global-semantic-highlight-func-mode
                                      global-semantic-stickyfunc-mode
                                      global-semantic-mru-bookmark-mode
                                      global-semantic-tag-folding-mode))
    ;;enable cedet
    (semantic-mode 1)
    	
    在CEDET1.1及以后版本中,通过设置默认语义子模式(semantic-default-submodes)来配置需要开启的模式,然后只需要(semantic-mode 1)一句话即可开启CEDET。CEDET支持的模式包括:
    CEDET模式列表
    模式名称模式作用
    global-semanticdb-minor-mode开启Semanticdb支持。Semanticdb用于存储已经分析出的语义结果
    global-semantic-mru-bookmark-mode开启自动书签存储,从而可以使用代码跳转
    global-cedet-m3-minor-mode激活CEDET右键菜单(还没发先有啥用)
    global-semantic-highlight-func-mode高亮方法、类等的第一行
    global-semantic-stickyfunc-mode当前编辑的方法上滚到可视区域外时,将方法名显示在最顶端
    global-semantic-decoration-mode激活样式
    global-semantic-idle-local-symbol-highlight-mode高亮所有当前选中变量使用的位置
    global-semantic-idle-scheduler-mode空闲的时候对源码自动进行语义分析
    global-semantic-idle-completions-mode在空闲的时候显示可能的命名补全(CEDET自己的命名补全显示在已输入部分后面,显示为淡灰色)
    global-semantic-idle-summary-mode在空闲时显示当前位置的信息
    global-semantic-show-unmatched-syntax-mode显示当前没有进行语义处理的元素
    global-semantic-show-parser-state-mode显示当前语义处理器的状态
    global-semantic-highlight-edits-mode高亮还没有进行语义处理的元素




  3. 配置代码提示/补齐

    代码提示需要配合auto-complete进行,虽然CEDET也有代码提示功能(参见CEDET配置参考文章),但CEDET官方推荐的是使用auto-complete进行代码提示和补齐。

    使用代码提示首先要开启CEDET代码补齐功能:
    ;;开启代码补齐功能
    (require 'semantic/ia)
    ;;添加C++头文件
    (require 'semantic/bovine/gcc)
    

    然后,将CEDET语义分析添加到ac-sources变量中,这是由于auto-complete使用ac-sources进行代码提示和补齐,配置如下:
    ;;添加ac-sources
    (defun my-c-mode-cedet-hook ()
      (add-to-list 'ac-sources 'ac-source-gtags)
      (add-to-list 'ac-sources 'ac-source-semantic))
    (add-hook 'c-mode-common-hook 'my-c-mode-cedet-hook)

    最后,需要配置auto-complete。由于auto-complete不是Emacs标准的一部分,因此需要手动下载而配置。首先去auto-complete官网Auto Complete Mode下载最新版本的auto-complete(本文是基于1.3.1),然后解压放在~/home/.emacs.d文件夹下(.emacs.d如果不存在则手动建立),并将文件夹名称改为"auto-complete"(如果不是)。然后配置加载auto-complete如下:
    (add-to-list 'load-path "~/.emacs.d/auto-complete")
    (require 'auto-complete-config)
    (add-to-list 'ac-dictionary-directories "~/.emacs.d/auto-complete/dict")
    (ac-config-default)
    ;;ignore case
    (setq ac-ignore-case t)

    最后一行配置了auto-complete代码提示忽略大小写,还有其他一些配置,例如设置提示框颜色等等,可以参考auto-complete配置参考文章。最后一行配置了忽略大小写

  4. 代码跳转

    代码跳转时程序设计中很常用的一个功能,CEDET可以通过配置支持代码跳转功能。配置如下:
    (global-set-key [f2] 'semantic-ia-fast-jump);;jump
    (global-set-key [S-f2];;jump back:shift+f2
                    (lambda ()
                      (interactive)
                      (if (ring-empty-p (oref semantic-mru-bookmark-ring ring))
                          (error "Semantic Bookmark ring is currently empty"))
                      (let* ((ring (oref semantic-mru-bookmark-ring ring))
                             (alist (semantic-mrub-ring-to-assoc-list ring))
                             (first (cdr (car alist))))
                        (if (semantic-equivalent-tag-p (oref first tag)
                                                       (semantic-current-tag))
                            (setq first (cdr (car (cdr alist)))))
                        (semantic-mrub-switch-tags first))))
    上面代码配置了使用f2进行代码跳转,然后使用shift+f2进行代码跳回(默认是使用\C-x B),另外需要注意的是使用代码跳转需要开启模式。此外如果代码无法跳回可在跳转配置前加入如下配置(参考点击打开链接):
    (defadvice push-mark (around semantic-mru-bookmark activate)
      "Push a mark at LOCATION with NOMSG and ACTIVATE passed to `push-mark'.
    If `semantic-mru-bookmark-mode' is active, also push a tag onto
    the mru bookmark stack."
      (semantic-mrub-push semantic-mru-bookmark-ring
                          (point)
                          'mark)
      ad-do-it)


  5. 代码缩进

    代码缩进功能没有深入研究,就参考了GNU Emacs官方文档上的示例代码设置了一下(参见点击打开链接),代码如下:
    ;;-------------indent setting start 
    ;; Make a non-standard key binding.  We can put this in
    ;; c-mode-base-map because c-mode-map, c++-mode-map, and so on,
    ;; inherit from it.
    (defun my-c-initialization-hook ()
      (define-key c-mode-base-map "\C-m" 'c-context-line-break))
    (add-hook 'c-initialization-hook 'my-c-initialization-hook)
    
    
    ;; offset customizations not in my-c-style
    ;; This will take precedence over any setting of the syntactic symbol
    ;; made by a style.
    (setq c-offsets-alist '((member-init-intro . ++)))
    
    
    ;; Create my personal style.
    (defconst my-c-style
      '((c-tab-always-indent        . t)
        (c-comment-only-line-offset . 4)
        (c-hanging-braces-alist     . ((substatement-open after)
                                       (brace-list-open)))
        (c-hanging-colons-alist     . ((member-init-intro before)
                                       (inher-intro)
                                       (case-label after)
                                       (label after)
                                       (access-label after)))
        (c-cleanup-list             . (scope-operator
                                       empty-defun-braces
                                       defun-close-semi))
        (c-offsets-alist            . ((arglist-close . c-lineup-arglist)
                                       (substatement-open . 0)
                                       (case-label        . 4)
                                       (block-open        . 0)
                                       (knr-argdecl-intro . -)))
        (c-echo-syntactic-information-p . t))
      "My C Programming Style")
    (c-add-style "PERSONAL" my-c-style)
    
    
    ;; Customizations for all modes in CC Mode.
    (defun my-c-mode-common-hook ()
      ;; set my personal style for the current buffer
      (c-set-style "PERSONAL")
      ;; other customizations
      (setq tab-width 8
            ;; this will make sure spaces are used instead of tabs
            indent-tabs-mode nil)
    ;; we like auto-newline, but not hungry-delete
      (c-toggle-auto-newline 1))
    (add-hook 'c-mode-common-hook 'my-c-mode-common-hook)
    ;;----------indent setting end


  6. 代码折叠

    代码折叠功能使用了Emacs自带的hs-minor-mode,但是由于默认快捷键使用起来太不方便,所以进行了自定义为C-c ?快捷键,配置代码如下
    ;;universal code folding
    (defun toggle-selective-display (column)
          (interactive "P")
          (set-selective-display
           (or column
               (unless selective-display
                 (1+ (current-column))))))
    (defun toggle-hiding (column)
          (interactive "P")
          (if hs-minor-mode
              (if (condition-case nil
                      (hs-toggle-hiding)
                    (error t))
                  (hs-show-all))
            (toggle-selective-display column)))
    (load-library "hideshow")
    (global-set-key (kbd "C-?") 'toggle-hiding)
    (global-set-key (kbd "C-`") 'toggle-selective-display)
    (add-hook 'c-mode-common-hook   'hs-minor-mode)
        (add-hook 'emacs-lisp-mode-hook 'hs-minor-mode)
        (add-hook 'java-mode-hook       'hs-minor-mode)
        (add-hook 'lisp-mode-hook       'hs-minor-mode)
        (add-hook 'perl-mode-hook       'hs-minor-mode)
        (add-hook 'sh-mode-hook         'hs-minor-mode)
    ;;display overlay content in echo area or tooltip
    (defun display-code-line-counts (ov)
          (when (eq 'code (overlay-get ov 'hs))
            (overlay-put ov 'help-echo
                         (buffer-substring (overlay-start ov)
                          (overlay-end ov)))))
     
        (setq hs-set-up-overlay 'display-code-line-counts)


  7. 其他设置

    除了上述设置,还有一些其他有趣的设置,包括:
  • 其他快捷键

    其他快捷键设置除了代码跳转外,还可以定义其他快捷键,包括:
    (defun my-c-mode-cedet-key()
      (local-set-key "\C-cd" 'semantic-ia-show-doc);;显示方法、类等的文档
      (local-set-key "\C-cs" 'semantic-ia-show-summary);;显示方法、类等的概述
      (local-set-key "\C-cc" 'semantic-ia-describe-class);;列举类的方法变量等
      (local-set-key "\C-ct" 'semantic-analyze-proto-impl-toggle);;在.h和.cpp文件之间进行跳转切换
      (local-set-key "\C-ci" 'semantic-decoration-include-visit);;进入include中的文件
    )
    (add-hook 'c-mode-common-hook 'my-c-mode-cedet-key)


  • 显示行号

(global-linum-mode 1)

  • Emacs24及以上版本主题设置

M-x list-faces-display

  • 隐藏工具栏

(tool-bar-mode -1)

  • Yasnippe代码模板

    yasnippe提供了代码模板功能,但我个人习惯了自己写书写,而且配置很麻烦,所以就没有深入弄,基本配置代码如下:
    (add-to-list 'load-path "~/.emacs.d/yasnippet-0.6.1c/")
    (require 'yasnippet)
    (yas/initialize)
    (yas/load-directory "~/.emacs.d/yasnippet-0.6.1c/snippets")
    需要注意的是,yasnnipe需要自己下载安装,与auto-complete方法一致,放在对应路径下就行,本文放在了~/.emacs.d/yasnippet-0.6.1c下。具体配置方法参见yasnippet配置参考文章。

配置完成后的效果如下图:

配置效果图

全部配置:

;;=====================================================================
;;Emacs settings begin
;;=====================================================================
;;newline and indent
(setq c-newline-and-indent 'newline-and-indent)
;;hide tool bar
(tool-bar-mode -1)
;; display column-number-mode
(global-linum-mode 1)
;;-------------indent setting start http://www.gnu.org/software/emacs/manual/html_mono/ccmode.html#Sample-_002eemacs-File
;; Make a non-standard key binding.  We can put this in
;; c-mode-base-map because c-mode-map, c++-mode-map, and so on,
;; inherit from it.
(defun my-c-initialization-hook ()
  (define-key c-mode-base-map "\C-m" 'c-context-line-break))
(add-hook 'c-initialization-hook 'my-c-initialization-hook)

;; offset customizations not in my-c-style
;; This will take precedence over any setting of the syntactic symbol
;; made by a style.
(setq c-offsets-alist '((member-init-intro . ++)))

;; Create my personal style.
(defconst my-c-style
  '((c-tab-always-indent        . t)
    (c-comment-only-line-offset . 4)
    (c-hanging-braces-alist     . ((substatement-open after)
                                   (brace-list-open)))
    (c-hanging-colons-alist     . ((member-init-intro before)
                                   (inher-intro)
                                   (case-label after)
                                   (label after)
                                   (access-label after)))
    (c-cleanup-list             . (scope-operator
                                   empty-defun-braces
                                   defun-close-semi))
    (c-offsets-alist            . ((arglist-close . c-lineup-arglist)
                                   (substatement-open . 0)
                                   (case-label        . 4)
                                   (block-open        . 0)
                                   (knr-argdecl-intro . -)))
    (c-echo-syntactic-information-p . t))
  "My C Programming Style")
(c-add-style "PERSONAL" my-c-style)

;; Customizations for all modes in CC Mode.
(defun my-c-mode-common-hook ()
  ;; set my personal style for the current buffer
  (c-set-style "PERSONAL")
  ;; other customizations
  (setq tab-width 8
        ;; this will make sure spaces are used instead of tabs
        indent-tabs-mode nil)
  ;; we like auto-newline, but not hungry-delete
  (c-toggle-auto-newline 1))
(add-hook 'c-mode-common-hook 'my-c-mode-common-hook)
;;----------indent setting end
;;=====================================================================
;;emacs setting end
;;=====================================================================
;;=====================================================================
;;cedet begin
;;cedet(1.1) setting based on method descripted at
;;http://alexott.net/en/writings/emacs-devenv/EmacsCedet.html
;;=====================================================================
;;set the mode enabled
(setq semantic-default-submodes '(global-semanticdb-minor-mode
                                  global-semantic-idle-scheduler-mode
                                  global-semantic-idle-summary-mode
                                  global-semantic-idle-completions-mode
                                  global-semantic-decoration-mode
                                  global-semantic-highlight-func-mode
                                  global-semantic-stickyfunc-mode
                                  global-semantic-mru-bookmark-mode
                                  global-semantic-tag-folding-mode))
;;enable cedet
(semantic-mode 1)
;;enable advanced functionality for name completion
(require 'semantic/ia)
;;include standard C/C++ headers
(require 'semantic/bovine/gcc)
;;add ac-souces, ac-sources is used by auto-complete
(defun my-c-mode-cedet-hook ()
  (add-to-list 'ac-sources 'ac-source-gtags)
  (add-to-list 'ac-sources 'ac-source-semantic))
(add-hook 'c-mode-common-hook 'my-c-mode-cedet-hook)
;;solve the problem can not jump back according to http://blog.163.com/vic_kk/blog/static/494705242010726297405/#sec-3_4
(defadvice push-mark (around semantic-mru-bookmark activate)
  "Push a mark at LOCATION with NOMSG and ACTIVATE passed to `push-mark'.
If `semantic-mru-bookmark-mode' is active, also push a tag onto
the mru bookmark stack."
  (semantic-mrub-push semantic-mru-bookmark-ring
                      (point)
                      'mark)
  ad-do-it)
;;add c-mode key set
(global-set-key [f1] 'speedbar)
(global-set-key [f2] 'semantic-ia-fast-jump);;jump
(global-set-key [S-f2];;jump back:shift+f2
                (lambda ()
                  (interactive)
                  (if (ring-empty-p (oref semantic-mru-bookmark-ring ring))
                      (error "Semantic Bookmark ring is currently empty"))
                  (let* ((ring (oref semantic-mru-bookmark-ring ring))
                         (alist (semantic-mrub-ring-to-assoc-list ring))
                         (first (cdr (car alist))))
                    (if (semantic-equivalent-tag-p (oref first tag)
                                                   (semantic-current-tag))
                        (setq first (cdr (car (cdr alist)))))
                    (semantic-mrub-switch-tags first))))
(defun my-c-mode-cedet-key()
  (local-set-key "\C-cd" 'semantic-ia-show-doc)
  (local-set-key "\C-cs" 'semantic-ia-show-summary)
  (local-set-key "\C-cc" 'semantic-ia-describe-class)
  (local-set-key "\C-ct" 'semantic-analyze-proto-impl-toggle)
  (local-set-key "\C-ci" 'semantic-decoration-include-visit)
)
(add-hook 'c-mode-common-hook 'my-c-mode-cedet-key);
;;=====================================================================
;;cedet end
;;=====================================================================
;;=====================================================================
;;auto-complete begin
;;auto-complete(1.3.1) setting based on method descripted at
;;http://cx4a.org/software/auto-complete/manual.html
;;=====================================================================
(add-to-list 'load-path "~/.emacs.d/auto-complete")
(require 'auto-complete-config)
(add-to-list 'ac-dictionary-directories "~/.emacs.d/auto-complete/dict")
(ac-config-default)
;;ignore case
(setq ac-ignore-case t)
;;=====================================================================
;;auto-complete end
;;=====================================================================
;;=====================================================================
;;yasnippet begin
;;yasnippet(0.6.1c) setting based on method descripted at
;;http://capitaomorte.github.io/yasnippet/#id3
;;=====================================================================
(add-to-list 'load-path "~/.emacs.d/yasnippet-0.6.1c/")
(require 'yasnippet)
(yas/initialize)
(yas/load-directory "~/.emacs.d/yasnippet-0.6.1c/snippets")
;;=====================================================================
;;yasnippet end
;;=====================================================================
;;=====================================================================
;;hs-minor-mode setting according to http://www.emacswiki.org/emacs/HideShow
;;=====================================================================
;;universal code folding
(defun toggle-selective-display (column)
      (interactive "P")
      (set-selective-display
       (or column
           (unless selective-display
             (1+ (current-column))))))
(defun toggle-hiding (column)
      (interactive "P")
      (if hs-minor-mode
          (if (condition-case nil
                  (hs-toggle-hiding)
                (error t))
              (hs-show-all))
        (toggle-selective-display column)))
(load-library "hideshow")
(global-set-key (kbd "C-?") 'toggle-hiding)
(global-set-key (kbd "C-`") 'toggle-selective-display)
(add-hook 'c-mode-common-hook   'hs-minor-mode)
    (add-hook 'emacs-lisp-mode-hook 'hs-minor-mode)
    (add-hook 'java-mode-hook       'hs-minor-mode)
    (add-hook 'lisp-mode-hook       'hs-minor-mode)
    (add-hook 'perl-mode-hook       'hs-minor-mode)
    (add-hook 'sh-mode-hook         'hs-minor-mode)
;;display overlay content in echo area or tooltip
(defun display-code-line-counts (ov)
      (when (eq 'code (overlay-get ov 'hs))
        (overlay-put ov 'help-echo
                     (buffer-substring (overlay-start ov)
                      (overlay-end ov)))))
 
    (setq hs-set-up-overlay 'display-code-line-counts)
;;=====================================================================
;;hs-minor-mode end
;;=====================================================================

有用的链接

CEDET配置参考文章


auto-complete配置参考文章


yasnippet配置参考文章


代码折叠配置参考文章


EmacsWiki


配置CEDET浏览和编辑C++


GNU Emacs官方文档

mg:Micro(GNU)类似于Emacs的文本编辑器:red_heart:公共领域 立即下载

相关推荐

vs2013 emacs扩展

一直很喜欢Emacs的键绑定,vs2008到vs2010一直都有Emacs的模拟键绑定,可惜似乎vs2012后这项福利了。 这个原本是vs2010的Emacs扩展插件,经过修改后可以在vs2013上使用。

将Emacs添加到右键快捷菜单中

长期用Emacs写代码,但是每次都是从命令行启动,有个麻烦事,针对单个文件,且该文件处在目录较深时,还要在命令中一层层敲进去,程序猿的时间都是很宝贵的,下面就来看看如何将Emacs添加到右键菜单中: 从“run”中运行“regedit”启动注册表; 在打开的注册表中找到“HKEY_CLASSES_ROOT\*”,这里需要注意,其中的“*”可不是指在“HKEY_CLASSES_...

gavin_8724的专栏 799

字符集的选择

字符集的选择 一:背景介绍 DICOM特定字符集(0008,0005) 此标签获得不同的值就代表使用不同的语言进行解码。 以下为多家CT厂商的(0008,0005)取值: 字符集: unicode是字符集,ASCII、GB2312、GBK、GB18030既是字符集也是编码方式,UTF-8只是编码方式。 二:中文字符集介绍 世界通用字符集——UTF 中文字符集——GB2312、GBK、GB18030 字符集的详细介绍 一:UTF-8 程序是把一个字节一个字节的来读取,然后再根据字节中开头的bit

qq_41972968的博客 1520

emacs添加yasnippet插件

git clone https://github.com/joaotavora/yasnippet.git vim ~/.emacs ;;load yasnippet (add-to-list 'load-path (expand-file-name "~/emacs.d/plugins/yasnippet/")) (require 'yasnippet) cd ~/.ema

Watanuki2006的博客 618

Cadence Virtuoso里搞定斩波运放AC仿真:PSS+PAC保姆级设置避坑指南

然而,当工程师们尝试在Cadence Virtuoso环境中对这种特殊结构进行AC特性分析时,往往会遇到传统AC仿真方法失效的困境——这正是PSS(Periodic Steady-State)与PAC(Periodic AC)仿真组合大显身手的场景。实际项目中我们常采用"先快后精"的两步法:先用快速设置确认大体趋势,再针对关键频段进行精细仿真。例如某次设计迭代中,将harmonics从10增加到20后,发现在1MHz处的相位裕度估算误差达15°,这解释了之前样机测试时的振荡问题。

weixin_33508411的博客 450

【阿里云大模型高级工程师ACP习题集】2.9 大模型应用生产实践(下篇)

【摘要】这是我精心整理出对应的习题集,里面足足有 30 道题目,从基础概念到深度拓展,全方位覆盖章节重点、难点。不管你是想检验自己的学习成果,还是想针对薄弱环节进行强化训练,它都能完美适配!

davidkorhenn的博客 2237

vs扩展emacs插件

安装 微软官方插件下载地址【free】目前只提供vs2010 下载:http://visualstudiogallery.msdn.microsoft.com/09dc58c4-6f47-413a-9176-742be7463f92 vs2012安装需要对下载到的东西进行处理,此处提供可用于vs2012的插件下载 或者自己对下载到的官方插件进行修改 修改方法:修改插件后缀名为.zip,解

fenxian2011新生活 1433

学术类PPT制作总结

本文分享了科技类PPT的制作技巧,希望相关的信息能帮助到读者。

奇妙水果的技术博客,欢迎交流技术~ 2881

加快emacs编辑速度

<br />在右键菜单中添加"Edit with Emacs"<br /><br /><br /> <br />启动emacs后随即打开server<br /><br />以后就可以用右键菜单中的"Edit with Emacs"快速编辑文件了。<br /> <br />启动server时如果出现 “The directory ~/.emacs.d/server is unsafe”<br />只需将~/.emacs.d/server 文件夹的所有者改成当前登录的帐户就行了。

旁门左道 971

从零玩转显示屏:手把手教你用Arduino驱动SPI屏幕(附引脚定义图)

本文提供了一份详尽的Arduino驱动SPI屏幕的入门指南。从SPI接口的核心引脚定义(如DC、RESET)与RGB接口的区别讲起,手把手指导硬件连接与软件库配置,并最终通过一个天气显示器实战项目,帮助读者掌握驱动SPI屏幕、显示RGB色彩内容的核心技能。

weixin_29189987的博客 131

Vue3 - 完美解决html2canvas截图不全问题,截图只截取当前可视区域导出图片不全,截屏导出的图片显示不全只有一部分或缺一块,vue3移动端H5网页项目使用html2canvas插件长截图!

vue3,html2canvas,移动端H5网页,截图不全,html2canvas长截图不全,保存长截图,页面滚动导致截图不全,网页下方截屏不到怎么办,底部一部分无法截屏到,保存的图片少了一大块,H5海报截图不完整,怎么截取滚动条下方的内容,截图图时图片不全,截图图片只有一半的问题,底部内容空白,截图空白问题的解决,截图不全怎么办,html2canvas.js网页截图功能(解决截图不全问题,移动端ios系统截图不完整,html2canvas截图太长又不能删减截取不到,使用HTML2Canvas在H5页面上实

🏆 前端领域优质创作者 1万+

Emacs之company代码候选补全(五十二)

(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/")) (add-to-list 'package-archives '("elpa" . "https://elpa.gnu.org/packages/")) 安装company # emacs ~/.emacs ;;company:代码候选补全 (add-hook 'after-init-hook'global-company-mode) (defun c.

Android系统攻城狮 2264

uniapp - 超详细的 H5 公众号网页微信登录示例代码,提供从 0-1 公众号配置及详细注释代码(站在新手小白的角度)第三方微信授权登录的实现!!

uniapp微信浏览器H5授权微信登录,UniApp开发H5接入微信登录的全过程,uniapp的H5页面使用微信登录,uniapp H5微信授权登录,H5之微信授权登陆 (uniapp网页版微信授权登录),uni-app开发H5第三方微信授权登录的实现,uniapp如何实现微信授权登录,公众号H5页面接入微信登录流程,uni-app - 最详细 H5 网页接入微信登录功能,提供公众号配置与详细注释示例代码(移动端网页实现点击登录按钮后 调用微信公众号授权登录功能 详细讲解接入流程与详细示例代码)官方最新超级

✅ 精选推荐文章 1万+

修改emacs的缩进,和vs2008一样

emacs的默认缩进风格不喜欢,大括号缩进2格,tab占8格字符。修改后大括号不会缩进,tab占4格字符。 修改方法: 在emacs按M-x,再输入c-set-style回车,再选择awk,这个awk风格正是我想要的风格。 但是这种方法修改后不会保存,下次启动emacs又会还原,所以有了下面这个方法。 改进后的修改方法: 修改~/.emacs文件,添加如下内容: (setq c

nicekwell的专栏 2226

论文阅读:ICLR 2026 Breaking and Fixing Defenses Against Control-Flow Hijacking in Multi-Agent Systems

该论文首先系统阐述了控制流劫持攻击的核心机理。此类攻击通过操纵多智能体系统的编排机制,诱导系统执行非安全操作,进而实现敏感信息窃取。攻击者将恶意指令伪装成环境错误信息,借助可信代理传递至系统编排器,利用"困惑副手"漏洞绕过传统安全防线。该论文指出,现有防御方案如LlamaFirewall所依赖的对齐检查机制存在根本性局限——安全目标与功能需求之间存在不可调和的内在冲突。该论文的核心贡献体现在攻防两个维度。

CSPhD-winston的博客 493

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

如何快速安装与配置 Joyride:让 VS Code 像 Emacs 一样可编程的完整指南

Joyride 是一个让 VS Code 具备高度可定制性的工具,自 2022 年起就致力于让 VS Code 拥有类似 Emacs 的可编程能力。本指南将为你提供简单快速的 Joyride 安装与配置步骤,帮助你轻松上手这款强大的 VS Code 扩展工具。 ## 准备工作:安装必要依赖 在开始安装 Joyride 之前,请确保你的系统中已经安装了以下工具: - Node.js(建议 v14

gitblog_00479的博客 666

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

emacs配置--包括gdb像vs2003一样多个可拉伸窗口和快捷键

<br />;; .emacs<br /><br /> ;;; uncomment this line to disable loading of "default.el" at startup<br /> ;; (setq inhibit-default-init t)<br /><br /> ;; turn on font-lock mode<br /> (when (fboundp 'global-font-lock-mode)<br />   (global-font-lock-mode

etetet029的专栏 1857

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

真香!Emacs 大佬公开转投 VS Code

(给程序员的那些事加星标)原创:程序员的那些事(id:iProgrammer)Emacs 和 Vim 这两个编辑器,江湖人称「神的编辑器」和「编辑器之神」。不管是哪种开发...

程序员的那些事 4335

vscode-dark-plus-emacs-theme:完美适配Emacs的VS Code Dark+主题

vscode-dark-plus-emacs-theme:完美适配Emacs的VS Code Dark+主题 项目介绍 在编程世界中,一个舒适的编程环境对于提升工作效率至关重要。对于许多开发者来说,Visual Studio Code(VS Code)的Dark+主题提供了优雅且功能丰富的编辑体验。然而,对于Emacs用户来说,如何在Emacs中享受到同样的视觉体验呢?vscode-dark-pl...

gitblog_00552的博客 1083

编辑器集成指南:让VS Code/ Vim/ Emacs支持markdownfmt

markdownfmt是一款类似于gofmt的Markdown格式化工具,它能够自动规范Markdown文档的格式,让你的文章排版更加整洁统一。本文将详细介绍如何在主流编辑器VS Code、Vim和Emacs中集成markdownfmt,提升你的Markdown写作效率。 ## 安装markdownfmt 在进行编辑器集成之前,首先需要安装markdownfmt工具。你可以通过以下步骤获取并安

gitblog_00090的博客 460

关于VS2010中的Emacs 扩展

<br />业内流传着这么一句话,<br />世界上有两种开发工具,<br />一个是vi,一个是emacs。。。<br /> <br />现在微软在VS2010中加入了emacs的扩展,<br />给广大emacs爱好者又增加了一个选择。<br /> <br />下面是下载链接,<br />有兴趣的朋友可以试试。<br />http://visualstudiogallery.msdn.microsoft.com/en-us/09dc58c4-6f47-413a-9176-742be7463f92

懒人的技术笔记 4241

helm-swoop vs 传统搜索:Emacs文本导航工具的终极对决

在Emacs的文本编辑世界中,高效的文本导航工具是提升 productivity 的关键。**helm-swoop**作为一款基于Helm界面的文本搜索工具,正以其独特的交互方式和强大功能,重新定义Emacs用户的文本搜索体验。本文将深入对比helm-swoop与传统搜索工具(如isearch)的核心差异,帮助你快速掌握这款终极文本导航利器。 ## 🚀 传统搜索的痛点:为何需要helm-swo

gitblog_00048的博客 628

EMACS vs VSCode:深度效率对比测试

作为一名长期使用多种代码编辑器的开发者,我最近做了一个有趣的效率对比实验。今天想和大家分享一下EMACS和VSCode在实际编程任务中的表现差异,以及如何通过科学测试找到最适合自己的工具。如果你也想做类似的工具对比,不妨试试这个平台,真的能省去很多环境配置的麻烦。特别是当需要快速验证某个想法时,从编写到分享可能只需要喝杯咖啡的时间。为了确保测试公平性,我编写了一个自动化脚本。EMACS的宏录制功能在重复性任务中能节省40%以上时间。所有测试都在禁用网络的情况下进行,避免更新干扰。插件调用(常用功能快捷键)

AmberLeopard26的博客 328

TeXpresso编辑器集成详解:VS Code、Emacs等主流编辑器配置方法

TeXpresso是一款专为LaTeX打造的实时渲染与错误报告工具,能显著提升文档编辑效率。本文将详细介绍如何在Emacs等主流编辑器中配置TeXpresso,让你轻松实现LaTeX文档的即时预览与错误追踪。 ## Emacs编辑器集成指南 ### 快速安装步骤 Emacs用户可通过以下简单步骤启用TeXpresso集成: 1. 首先确保已安装TeXpresso二进制文件 2. 加载Ema

gitblog_00068的博客 871

Modus Themes vs 其他Emacs主题:为什么它是开发者的最佳选择?

作为Emacs用户,选择一款合适的主题对于提升编程效率和保护视力至关重要。在众多Emacs主题中,**Modus Themes** 以其卓越的可访问性和高度可定制性脱颖而出,成为专业开发者的首选。这款高度可访问的GNU Emacs主题集合严格遵循WCAG AAA色彩对比标准,为开发者提供了无与伦比的视觉体验。 ## 🎯 什么是Modus Themes? Modus Themes是一套专门为G

gitblog_00922的博客 743

Emacs主题性能对比终极指南:Kaolin vs Doom vs Spacemacs主题

你是否曾经因为Emacs主题加载缓慢而感到烦恼?😫 在众多Emacs主题中,**Kaolin主题**以其出色的性能和视觉美感脱颖而出。本文将为你带来详细的**Emacs主题性能对比**分析,帮助你了解Kaolin、Doom和Spacemacs三大主题的性能差异,让你找到最适合自己的Emacs主题方案。 ## 📊 三大主题性能对比概览 | 主题类型 | 启动速度 | 内存占用 | 语法高亮性

gitblog_01051的博客 394
下一篇: C++简史
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值