Создание среды разработки C++ и Python на основе Vim [постоянно обновляется]

Python C++ VIM

В последнее время vscode некоторое время был популярен в технических кругах.Каждый день вы можете увидеть статьи Amway и замечательные плагины на Nuggets, такие как «Учитель поощрения Ян Чаоюэ», и серию рыбаков на работе, «Чтение Плагин романов», «Плагин наблюдения за акциями» заставляет меня все больше и больше чувствовать, что vscode становится все более и более мощным, достаточно мощным, чтобы делать что угодно, как и операционная система, и это очень похоже на редактор бога emacs. Недавно в тайваньском кругу emacs появился предатель, и, наконец, сопровождающий перешел на сторону vscode и опубликовал новость в официальном твиттере тайваньского emacs.

Битва редакторов все еще продолжается сегодня, когда язык все еще находится на подъеме.Кто лучший редактор между Vim и Emacs, является постоянной темой в кругу программистов, независимо от того, где он находится, это может легко вызвать священную войну. Языки разработки, используемые в компании, в основном C++ и python, а среды разработки, используемые коллегами по команде, также разнообразны, включая NetBean, vscode, C++ eclipse, pycharm и vim.Редактор или IDE — это всегда просто инструмент.Ценность инструмента не в том, насколько он мощный и богатый, а в том, какую ценность он может нам принести., поэтому ценность одного и того же инструмента нельзя сравнивать у разных людей. Я к тому, что если вы часто используете два-три языка в процессе разработки, очень важна привычная связь в процессе разработки, и я бы рекомендовал использовать vim; но IDE — это сильно инкапсулированный инструмент, что очень важно для процесс разработки Существуют определенные предположения относительно метода, поэтому во многих случаях, особенно в реальных проектах, он сэкономит нам много драгоценного времени.

Каждая IDE имеет свою конфигурацию и особенности использования, и когда их количество велико, стоимость переключения и обучения также очень высока. В дополнение к vim я обычно использую sublime для просмотра кода под windows, потому что он легкий и может быстро редактировать, вырезать и копировать под windows. Я использовал pycharm для разработки python, и я использовал eclipse в течение некоторого времени для разработки C ++, В сочетании с несравненным удобно синхронизировать код под окнами с удаленным linux, а затем скомпилировать его с помощью make, но в конец, все это вырезано до vim.

Позвольте мне рассказать о причине, по которой я выбрал vim в качестве основной среды разработки.Существует много IDE, и стоимость обучения столь же высока.Может быть N IDE, использующих N языков. У IDE есть свои преимущества, она интегрирована и оптимизирована под определенный язык, и пользователям не нужно много чего настраивать. Но на самом деле, чем более сильно затвердевшие вещи могут быть, тем сложнее их использовать, и отсутствие определенной гибкости. Существует множество плагинов для vim, которые поддерживают различные языки, а также решают проблему синхронной работы Linux. Знаменитые плагины очень активны в github и stackoverflow. Один vim решает все IDE.

Я использую vim для фоновой разработки с Python и C++, и основная функция по-прежнему незаменима.Быстрое завершение, переход к определению, поиск по ключевым словам, подсветка синтаксиса, проверка синтаксиса, свертывание отступов, схема отображения функций, шаблон файла, дерево каталогов и т. д., и мой vim теперь может легко выполнять эти функции.

Давайте поговорим о 2019. Плагины vim, которые я использую, в основном представляют собой краткие введения.Для каждого из них я кратко представлю плагины и операции использования, а также наиболее важные документы, потому что есть более подробная информация об использовании.

Образовательные ресурсы

На github есть хороший обучающий ресурс по vim, начиная с самого простого введения:

Vim от новичка до профессионала:GitHub.com/brushless motor spoof/vim-… глупый метод vimscript:woohoo.tree lib.com/book-detail…

Кроме того, я также слежу за некоторыми Vimers на Zhihu для многих плагинов vim, таких как:

  1. Вэй Исяо(Уууу. Просто позвоните.com/people/ просто спросите…)
  2. Чжао Цимин(Вуху. Call.com/people/for…)
  3. Столбец Vim(zhuanlan.zhihu.com/hack-vim)

Как правило, в нем рассказывается, как создавать Vim IDE и плагины.

Кроме того, мне нравится просматривать github в порядке убывания Most Star в поисках плагинов, связанных с vim.

мой.vimrcСсылаться на:GitHub.com/C позиция/нет…

Управление плагинами

плагин

vim 8 уже поддерживаетсяАсинхронное выполнениеПредставленные и поддерживаемые в большинстве подключаемых модулей асинхронные менеджеры подключаемых модулей, такие как plug.vim, больше не должны ждать так долго, чтобы обновить подключаемые модули, а старый vundle больше не рекомендуется.

vim-plug поддерживает не только функцию асинхронного обновления, но иПоддерживает ленивую загрузку типов файлов и команд запуска., так что скорость запуска vim намного выше.

Документация

  1. Справочник по установке и использованию:blog.jobbole.com/114132/
  2. Методы ленивой загрузки плагинов:сегмент fault.com/ah/119000001…
  3. Анализ медленной скорости запуска vim:сегмент fault.com/ah/119000001…

настроить

ленивая загрузка плагинов

plug.vim поддерживает ленивую загрузку подключаемых модулей, поэтому ненужные подключаемые модули не запускаются в начале; plug.vim поддерживает настройку как по команде (command), так и по типу файла (file_type).

" 在第一次执行 NERDTreeToggle 命令时,NERD tree 插件才开始加载
Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' }
" on 支持多命令
Plug 'junegunn/vim-github-dashboard', { 'on': ['GHDashboard', 'GHActivity'] }
" 打开 clojure 类型的文件时,vim-fireplace' 才开始加载
Plug 'tpope/vim-fireplace', { 'for': 'clojure' }
" for 支持多文件类型
Plug 'kovisoft/paredit', { 'for': ['clojure', 'scheme'] }

Используйте on для ленивой загрузки метода YouCompleteMe:

  1. Сначала очистите список команд, он не запустится по умолчанию.
  2. Мы используем автоматическую команду, чтобы позволить Vim автоматически выполнить указанную команду, и указанная команда будет выполнена, когда произойдет указанное событие; при входе в режим вставки вызовите вручную call plug#load('YouCompleteMe')
  3. Удалить группу автокоманд
# on 为空,后面手动加载
Plug '~/YouCompleteMe', {'on': []}
augroup load_ycm
    autocmd!
    "延迟加载,在 insert 模式手动加载插件
    autocmd InsertEnter * call plug#load('YouCompleteMe') | autocmd! load_ycm
augroup END

Отложенная загрузка не панацея, и в конечном счете она зависит от того, есть ли такой спрос, поэтому обычно мы стараемся использовать отложенную загрузку, когда запуск относительно медленный.. Кроме того, авторы общих подключаемых модулей должны использовать собственную функцию отложенной загрузки, а не полагаться на ожидание отложенной загрузки внешними подключаемыми модулями.

Итак, как проанализировать проблему плагина, когда скорость запуска низкая?

Вы можете указать параметры при запуске vim,vim --startuptime vim.log -c q, который записывает информацию о времени в файл при запуске, чтобы проанализировать, какой шаг занимает больше всего времени при загрузке .vimrc, плагинов и открытии первого файла.

times in msec
 clock self+sourced self: sourced script
 clock elapsed: other lines
...
003.691 002.008 002.008: sourcing /home/luffichen/.vim/autoload/plug.vim
021.676 000.021 000.021: sourcing /usr/local/share/vim/vim81/filetype.vim
021.869 000.017 000.017: sourcing /usr/local/share/vim/vim81/filetype.vim
...

Первая колонка — момент времени, вторая и третья — длинные (разница: вторая — self+sourced, а третья — self), фокусируемся на третьей колонке, времени выполнения самого скрипта.

Поскольку один и тот же плагин будет иметь несколько строк данных, нам нужно вручную подсчитать третий столбец того же плагина как сумму, что очень громоздко, поэтому кто-то на github написал плагин для анализа времени выполнения. каждого плагина и вывод линейного графика, вы можете увидеть подробности:GitHub.com/and medicalsystem/vim…

Есть и другие методы анализа, которые можно посмотреть подробнее: Ускорение ВИМ:сегмент fault.com/ah/119000001…

Лаконичная операция

  1. :PlugInstall, установить плагины, которые были добавлены в .vimrc
  2. :PlugStatus, проверьте ход установки
  3. :PlugClean, удалить плагины которых нет в конфигурационном файле

Установить плагины в автономном режиме

Поскольку среда разработки Linux компании, как правило, не может подключаться к внешней сети, невозможно напрямую использовать плагин для установки плагинов из github.Мой метод:

Возьмите автопары в качестве примера,

  1. В среде, которая может получить доступ к внешней сети,git clone https://github.com/jiangmiao/auto-pairs
  2. Упаковать и сжать auto-pairs.zip
  3. Загрузите сжатый пакет на сервер и распакуйте его,rz -bye,unzip auto-pairs.zip
  4. Унифицированная копия в каталог пользовательского плагина, я поместил его в каталог здесь~/vim-pluginВниз,cp -rf auto-pairs ~/vim-plugin/
  5. Настройте .vimrc, укажите локальную директорию плагина,Plug '~/vim-plugin/auto-pairs'
  6. запустить vim и выполнить:PlugInstall
  7. Проверьте установку,:PlugStatus

быстрое завершение

плагин

Эти плагины отлично решают завершение кода и подсказки C++ и Python, а другие языки могут ссылаться на другие введения.

С продвижением протокола vscode lsp появились соответствующие плагины для завершения синтаксиса vim, такие какcoc.nvim, в основном асинхронный и поддерживает множество плагинов автодополнения синтаксиса на vscode, можете попробовать (ps: версия системы у компании относительно старая и к сети не подключен, поэтому я не закинул этот плагин, а позже слышал что есть запакованная версия, можете использовать ее Установка, можете потом попробовать, если нужно).

Специальное введение Coc.nvim:zhuanlan.zhihu.com/p/39302327coc.nvim:GitHub.com/neo-handled/co…

В настоящее время для завершения C/C++, пожалуйста, используйте YouCompleteMe напрямую, их нет; кроме того, YCM-Generator в основном используется для решения проблемной проблемы генерации файла конфигурации YouCompleteMe.

Изначально последняя версия YCM также поддерживает завершение Python, просто установите его.jediЭто нормально, но версия системы среды разработки компании не очень высока, и последняя версия YCM не может быть скомпилирована, поэтому установите плагин, который использует серверный джедай в качестве дополнительного клиента.jedi-vim.

Я хотел представить SuperTab (GitHub.com/И текст Вана/Su…), функция, которую он реализует, состоит в том, чтобы просто использовать вкладку для вызова функции завершения vim, которая точно такая же, как и в операционных привычках Linux, и удобна и разумна, но сам YCM включает функцию SuperTab, поэтому нет необходимо установить SuperTab с избыточностью плагинов, чтобы избежать конфликтов. Кроме того, в документации YCM также говорится, что включены функции других плагинов, а именно:

clang_complete
AutoComplPop
Supertab
neocomplcache

Наконец, добавьте omnicomple, иногда YCM и jedi-vim не могут завершиться в некоторых случаях, например, я часто сталкиваюсь, я просто хочу завершить слово, которое я написал ранее, это слово может быть просто словом в комментарии, у YCM есть никак не найти его, на этот раз я буду использовать omnicomple командную строку.

Документация

  1. Раздел установки справочной документации по установке плагина jedi-vim:Если вы слишком беспокойны, чтобы избегать разговоров. GitHub.IO/2018/10/02/…
  2. omnicomplete, vim универсальное завершение,:help ins-completion
  3. Подробная ссылка на операцию YCM:GitHub.com/val Лори С/йо…
  4. Конфигурация YCM:zhuanlan.zhihu.com/p/33046090

настроить

YCM

Завершение YCM требует синтаксического анализа файла, поэтому он должен полагаться на.ycm_extra_conf.pyконфигурационный файл, сгенерировать.ycm_extra_conf.pyФайл конфигурации имеет подробное введение в google, мы используем его здесьYCM-GeneratorПлагин, который может генерировать необходимые файлы конфигурации для системы сборки make.

"=========================================
" YCM-Generator 插件配置
"=========================================
" ctrl-I 自动生成 .ycm_extra_conf.py 文件
noremap <C-I> :YcmGenerateConfig -c g++ -v -x c++ -f -b make .<CR>

После добавления вышеуказанной конфигурации в .vimrc, если после открытия корневого каталога проекта выполняется сочетание клавиш Ctrl-i, файл конфигурации будет автоматически сгенерирован в текущем каталоге.

  1. ctrl + I, файл .ycm_extra_conf.py создается автоматически
  2. Ctrl + Space, инициируйте предложения завершения в любом месте, даже без строкового префикса. Это полезно для просмотра того, какие функции верхнего уровня доступны для использования.
  3. :YcmRestartServer,Начать сначала
  4. :YcmDiagsи:YcmDebugInfo,поиск информации
  5. :YcmCompleterкоманда с другими подопциями для завершения функции, например,GoToDeclarationперейти к декларации

omnicomple

  1. Ctrl-X Ctrl-L: полная линия
  2. Ctrl-X Ctrl-N: завершение ключевого слова в текущем файле
  3. Ctrl-X Ctrl-i: ключевые слова в текущем файле и его заголовочных файлах
  4. Ctrl-X Ctrl-]: завершение тегов
  5. Ctrl-X Ctrl-F: завершение имени файла
  6. Ctrl-X Ctrl-O: всемогущее (всемогущее) завершение

Зачем вам нужен omni для завершения YCM?YCM не может завершить строки в буфере, поэтому вам нужно использовать его сейчасCtrl-X Ctrl-N

jedi-vim

  1. leader + d: определение переходов, включая операторы и модули импорта.
  2. leader + n: просмотр использования
  3. leader + r: переименовать
  4. :Pyimport os: открыть модуль ОС
  5. Ctrl + space:Завершение

инструкция

  1. Система centos относительно старая, а версия с использованием YCM не самая последняя, ​​вот яGitHub.com/val Лори С/йо…Версия clang+llvm-3.3-amd64-Ubuntu-10.04.4.tar.gz

подсветка синтаксиса

плагин

vim-polyglot — это готовый пакет подсветки синтаксиса, а также функции выравнивания, поддерживающие134 языка; При этом все языковые файлы лениво загружаются для типа файлов, что не повлияет на скорость запуска vim.

Конкретные поддерживаемые языки см. во введении на github:GitHub.com/Erun/vim…

настроить

Практически нет необходимости загружать конфигурацию, просто нужно, чтобы vim открыл синтаксическую функцию.

syntax on

линия отступа

плагин

indentLine — это плагин для отображения вертикальных линий выравнивания, он используется для того, чтобы код оставался аккуратным, но плагин поддерживает только коды с выравниванием по пробелу, поэтому линии выравнивания не будут отображаться для кодов с выравниванием по табуляции, потому что разные редакторы отображают вкладки по-разному, некоторые отображают 4 пробела, а некоторые отображают 8 пробелов; моя привычка — позволять vim автоматически преобразовывать вкладку ввода в 4 пробела, и отображение такого кода одинаково во всех редакторах.

Табуляция автоматически преобразуется в 4 пробела:

"将输入的TAB自动展开成空格。开启后要输入TAB,需要Ctrl-V<TAB>
set expandtab
"使用每层缩进的空格数
set shiftwidth=4
"编辑时一个TAB字符占多少个空格的位置
set tabstop=4
"方便在开启了et后使用退格(backspace)键,每次退格将删除X个空格
set softtabstop=4
" 使回格键(backspace)正常处理indent(缩进位置), eol(行结束符), start(段首), 很奇怪 Vim 默认竟然不允许在这些地方使用 backspace
set backspace=indent,eol,start
"开启时,在行首按TAB将加入 shiftwidth 个空格,否则加入 tabstop 个空格
set smarttab

Конфигурация indentLine:

"打开缩进线
let g:indentLine_enabled = 1
let g:indentLine_char='¦'

действовать

  1. :IndentLinesToggle, включить отступы строк

Подсветка синтаксиса + линейный график с отступом

проверка грамматики

плагин

ale — плагин для проверки синтаксиса, похожий на syntastic, но имеющий очевидное преимущество — проверка синтаксиса выполняется асинхронно, поэтому в принципе лагов не будет, но он поддерживает только версии выше Vim 8.0.

Ale поддерживает различные анализаторы кода на нескольких языках, что касается C/C++, он поддерживает: gcc, clang, cppcheck и clang-format и т. д. Его нужно установить отдельно и положить в PATH, можно использовать ALE. после изменения текста Эти линтеры автоматически вызываются для анализа последнего кода, а затем результаты различных линтеров объединяются и отображаются в интерфейсе.

Поскольку протокол LSP поддерживает проверку синтаксиса, ALE поддерживает LSP позже, а также поддерживает функцию завершения синтаксиса LSP, что делает ALE все более и более большим.Я в основном использую его только как плагин для проверки синтаксиса.

Наборы инструментов ALE и clang должны очень хорошо использоваться вместе,https://github.com/w0rp/ale/blob/master/doc/ale-c.txtЗдесь много вариантов конфигурации для clang, поддержкаcompile_commands.json, устраняя проблему поиска заголовочных файлов, но, к сожалению, версия системы компании более старая.

Документация

  1. официальная документация:GitHub.com/my0personality/aller/внезапно…
  2. Эль плагина Vim:Блог Woo Woo.cn на.com/ wakeed Y/ah…

настроить

ale

Конфигурация ale обычно указывает конкретные параметры линтера и линтера языка; здесь я настраиваю только проверку синтаксиса C++, C и python, C++ и C используют cppcheck, а python использует pylint; поэтому здесь требуется дополнительная установкаcppcheckиpylintвнешняя программа.

g:ale_lintersИспользуется для указания линтера, и я настроил проверку синтаксиса так, чтобы она выполнялась только при изменении нормали и выходе из вставки, чтобы не влиять на скорость.

let g:ale_linters = {
            \ 'cpp': ['cppcheck'],
            \ 'c': ['cppcheck'],
            \ 'python': ['pylint'],
            \}
" normal 模式下文字改变运行 linter
let g:ale_lint_on_text_changed = 'normal'
" 离开 insert 模式的时候运行 linter
let g:ale_lint_on_insert_leave = 1
let g:ale_c_cppcheck_options = '--enable=all'
let g:ale_cpp_cppcheck_options = '--enable=all'

Покажите результаты проверки синтаксиса cppcheck и ale в коротком фрагменте кода:

int *ptr_list = NULL;
*ptr_list = 1;

Нижняя строка состояния и левый столбец будут сообщать об ошибках:Null pointer dereference,следующее:

Поиск по ключевым словам

плагин

FlyGrep построен из SpaceVim (spacevim.org/cn/) и поддерживает регулярные выражения.После настройки сочетания клавиш Ctrl-F он ничем не отличается от других поисков IDE.

FlyGrep может искать файлы только в текущем каталоге, поэтому, если вы хотите выполнить поиск по всему проекту, вам нужно сначала переключиться в корневой каталог проекта.

Документация

  1. Для подробного ознакомления и использования FlyGrep обратитесь к официальной документации:GitHub.com/brushless motor spoof/fly G…

настроить

FlyGrep

Привязать сочетание клавиш Ctrl-F:

"=========================================
" FlyGrep 插件配置
"=========================================
nnoremap <C-F> :FlyGrep<CR>

действовать

FlyGrep

  1. Ctrl-F, искать ключевые слова в текущем каталоге, здесь я обычно ищу в корневом каталоге проекта, поэтому сначала перемещайте полученный корневой каталог
  2. <Esc>, выйти из поиска
  3. <Enter>, введите выбранный результат поиска
  4. <Tab>, следующий результат поиска
  5. <S-Tab>, предыдущий результат поиска
  6. <Home>, результат первого запуска
  7. <End>, последний результат поиска

поставляется с вим

Возьмите ключевое слово поиска «Main» в качестве примера:

  1. :vim /main/ % | copen: поиск только в текущем файле

  2. vim /main/ * | copen: поиск только в текущем каталоге

  3. vim /main/ ../** | copen: Поиск в родительском каталоге и рекурсивно

  4. vim /main path1/** path2/** | copen: может искать по нескольким путям

инструкция:

  1. %Указывает текущий файл
  2. copenИспользуется для открытия окна, хранения результатов поиска, легкого прыжка

график поиска

Переключатель файла заголовка исходного файла

плагин

В проектах на C++ часто требуется переключение перед заголовком и соответствующим исходным файлом, CurtineIncSw предоставляет такую ​​функцию, но ее переключение имеет определенные предпосылки:

  1. Заголовочный файл и исходный файл должны быть одинаковыми, за исключением имени суффикса и каталога, а также имя файла должно быть одинаковым, например, foo.c соответствует foo.h.
  2. Два файла находятся либо в одном каталоге, либо файл, который нужно открыть, находится в подкаталоге открытого файла.

работать:

  1. leader-R: переключиться с файла заголовка на исходный файл

Прыжок

Для прыжков на python я использую плагин jedi-vim, для прыжков на C++ я использую инструмент vim + ctags, для прыжков по тегам используется vim-matchup.

ctags должен быть установлен сам по себе.

В прошлом написание нескольких строк кода и запуск ctags для создания индекса каждый раз занимало много времени.

В настоящее время существует множество инструментов для автоматической и асинхронной генерации тегов под Vim 8. Вот рекомендация: vim-gutentags Этот плагин в основном делает две вещи:

  1. Определите каталог проекта, к которому принадлежит файл, то есть текущий путь к файлу рекурсивно ищет, существуют ли файлы .git, .svn, .project и другие значки (которые можно настроить), чтобы определить каталог проекта, к которому принадлежит текущий документ.
  2. Обнаружение изменений файлов в рамках одного и того же проекта может автоматически постепенно обновлять файл .tags соответствующего проекта. Каждый раз, когда вы меняете несколько строк, вам не нужно перегенерировать их все, и это инкрементное обновление может обеспечить упорядочение символов в файле .tags, что удобно для быстрого поиска символов в Vim с использованием бинарного поиска.

настроить

vim-gutentags

" gutentags 搜索工程目录的标志,碰到这些文件/目录名就停止向上一级目录递归
let g:gutentags_project_root = ['.root', '.svn', '.git', '.hg', '.project']

" 所生成的数据文件的名称
let g:gutentags_ctags_tagfile = '.tags'

" 将自动生成的 tags 文件全部放入 ~/.cache/tags 目录中,避免污染工程目录
let s:vim_tags = expand('~/.cache/tags')
let g:gutentags_cache_dir = s:vim_tags

" 配置 ctags 的参数
let g:gutentags_ctags_extra_args = ['--fields=+niazS', '--extra=+q']
let g:gutentags_ctags_extra_args += ['--c++-kinds=+px']
let g:gutentags_ctags_extra_args += ['--c-kinds=+px']

С указанными выше настройками вы обычно не можете почувствовать процесс создания файла тегов. Пока файл был изменен, gutentags будет молча проверять, нужно ли обновлять файл данных для вас в фоновом режиме. нужно беспокоиться об этом, и это поможет вам:setlocal tags+=...

Добавьте соответствующий файл тегов в текущий файл, не затрагивая другие файлы. Благодаря асинхронному механизму Vim 8 вы можете использовать функции, связанные с ctags, в любое время, а база данных всегда актуальна. Следует отметить, чтоgutentags должен полагаться на флаги в project_root, определенные выше, чтобы определить проект, в котором находится файл.Если файл не размещен в .git/.svn, еслиgutentags не может найти каталог проекта, он не быть диким файлом Генерировать теги, что также разумно. Если вы хотите избежать этого, вы можете поместить пустой файл с именем .root в свой каталог с дикими файлами и активно сообщить гутентагам, что это каталог проекта.

действовать

  • работать:
  1. ctrl+]:запрыгнуть
  2. ctrl+o: прыгать назад
  3. %: перейти к следующей вкладке

Документация

  1. stackoverflow.com/questions/1…
  2. vim.wikiah.com/wiki/сингл…
  3. blog.CSDN.net/просто прохождение...
  4. releases.lilumu.org/3.7.0/tools…
  5. woohoo.sky wind.why/blog/arc ВИЧ…

шаблон файла

плагин шаблона vimсегмент fault.com/ah/119000000…Vim загружает шаблоны для определенных файловПо умолчанию один из blog.CSDN.net//ah...

Статус бар

плагин

vim-airline является альтернативой powerline и работает с tarbar. После установки этих двух плагинов строка состояния, предварительный просмотр контура и панель задач находятся на своих местах.

Документация

  1. официальная документация vim-airline:GitHub.com/vim-airline…
  2. документация по установке тарбара:Ууху.Украинская банка.Это /posts/2015/…

окно

Боковая панель, связанная с классом/методом/переменной

  • работать:
  1. F9 чтобы открыть
  • Плагин:
  1. majutsushi/tagbar

верхняя панель вкладок

  • работать:
  1. ctrl+left, откройте файл справа от списка файлов
  2. ctrl+right, откройте файл слева от списка файлов
  3. ctrl+n, откройте следующую вкладку
  4. ctrl+p, чтобы открыть предыдущую вкладку

Форматирование С/С++

  1. F4, в обычном режиме форматировать код файла, в визуальном режиме форматировать выбранный код

складывать

Плагин:GitHub.com/Они и дядя Эргу/S…Действие: zc, чтобы закрыть складку, и zo, чтобы открыть складку.

отступ

работать:<<и>>, команда == для отступа текущей строки, выберите несколько строк в визуальном режиме, используйте команду = для отступа выбранных строк Документация:Одна ночь 123.blogspot.com/2010/10/vim…

скопировать и вставить

vim скопировать в виндовс

  • Установить x11:yum install libX11 libX11-devel libXtst-devel libXtst libXt-devel libXt libSM-devel libSM libXpm libXpm-devel
  • Загрузите исходный код vim 8 и скомпилируйте:
  1. ./configure --prefix=/data/luffichen/bin/vim-8.1 --with-features=huge --with-luajit --enable-luainterp=yes --enable-fail-if-missing --enable-pythoninterp=yes --with-x=yes --enable-gui=auto
  2. Проверьте, поддерживается ли X11:grep X11 src/auto/config.hЕсли есть#define HAVE_X11 1 #define HAVE_X11_XPM_H 1 #define HAVE_X11_SM_SMLIB_H 1Это означает, что зависимость прошла успешно
  3. make -j4 && make install
  4. vim --version | grep clipboardПроверьте, поддерживает ли он
  5. Запустите Xshell и подключитесь к серверу по протоколу SSH с переадресацией X11, конкретная операция: Файл — Свойства сеанса по умолчанию — Туннель — Пересылка X11, выберите X Display
  6. настроить ssh,vi /etc/ssh/sshd_configУбедитесь, что конфигурацияX11Forwrding yes, чтобы разрешить переадресацию X для SSH
  7. Установите сервер VcXsrv X11,источник forge.net/projects/VC…Функция буфера обмена, похоже, плохо поддерживает китайский язык, поэтому здесь используется VcXsrv)
  8. Откройте XLaunch, выберите несколько окон и установите номер отображения на 0, не запускайте клиент и проверьте буфер обмена.
  • работать:
  1. визуальный режим, выполнить после выбора копируемого контента+y, ты сможешь Установите луаджит:blog.CSDN.net/set_627/art…