Carthago delenda est!
Тут я расскажу о работе в интерактивной консольной среде. О том как превратить
vim в IDE для C++-ных, а так же об утилитах как Lynx и Mutt.
В этом мануале используется
zypperв качестве системы управления пакетами, однако команда в конечном счёте зависит от вашего дистрибутива
CtrlKПока ещё полностью не запустился, ноTermdebugработает штатно
Для проверки доступа к сайтам и проверки ssl вам стоит установить lynx.
В общем доступность
sslи вообще доступность сайта можно проверить и с помощью:curl [-k] -vvI https://domain.org, а затем скачать и установить сертификат с помощьюopenssl s_client, как описано в проектеНибелунги, ноLynxпо истене великая вещь, которая сыграет ещё свою роль в вашем таинственном трудеsysпрога/depопса, в вашей борьбе невидимого фронта, особенно при создании образовDocker-а
Для перехода на адресс, нажмите g и введите или вставьте url, затем
Enter.
Вы можете производить навигацию по странице с помщью клавишь
[вниз, вверх, влево, вправо], а так же Tab. При заполнении полей форм,
Lynx сам распознаёт тип поля: checkbox, text и тд.
Lynx спросит вас разрешение на скачивание cookie и прочей информации.
Для выхода q.
В общем всё очень похоже на Vim.
В терминале присутствуют несколько сред для работы с почтой. Очень удобная
среди них: mutt. Но при вызове собственно говоря команды mail вы окажетесь
в ещё более простой интерактивной среде.
При вызове, следует передать параметр -Nб что бы не печатать заголовки
метаданных писем:
# опустить заголовок писем
mail -N- Вы окажетесь в режиме спика писем. Используйте
zдля движения впрёд по списку - Если в ыначали редактировать письмо, используйте
Ctrl + dдля завершения ввода текста - Для удаления всех писем, используйте
d * - Для помощи используйте
help - Для выхода
quit
TODO: привести раздел к стандартной форме, предположительно создать отдельный подпроект и консолидировать туда все тексты по
Git-у
Если вы хотите установить локальную конфигурацию пользователя, добавьте раздел
[user] в .git/config. Если вы хотите изменить имя коммитера в уже
существующем коммите: git commit --amend --reset-author -m "<messsage>".
Стоит отменить less подобный вывод git branch:
# Отменяем less подобное поведение git branch
git config --global pager.branch falseДля того, что бы добавить несколько url-ов для в качестве upstream:
git remote set-url origin --push --add url-one
git remote set-url origin --push --add url-twoРедактор в котором можно найти покой души от всепожирающих графических IDE.
А что вы думаете о том, чтобы создать команду разработки, пишушей весь код на
Vim а графику использующей лишь для решения графических задачь?
Vim потоковый консольный тектовый редактор. Консольный и текстовый так как
работает с текстовыми файлами в режиме терминала. Потоковый, так как работает с
потоковыми файлами, в отличии от того же редактора ISPF. При этом эра
редакторов Запись-ориентированных фаловых систем явно ощущается в Vim в
командах работающих в режиме интервалов строк.
Vim имеет два режима:
- Режим команд
- Режим ввода текста
Режим команд имеет так же два дочерних режима:
- Режим команд относительно курсора
- Режим команд абсолютного позиционирования
В первом случае мы вводим команды прямо в оболочку без отклика символов команды. Команда отрабатывает относительно местоположения курсора. Во втором случае мы начинаем команду со символа двоеточия и наблюдаем отклик внизу экрана, команда в этом случае работает по строкам файла.
Для перехода из режима ввода текста в режим команд, используется клавиша
<ESC>. Для обратного перехода команды ввода текста. Вообще всю архитектуру
взаимодействия с Vim можно было бы наглядно описать с помощью диаграммы
состояний.
В режиме команд есть так же два типа:
- Обычные команды навигации, изменений и тд., назовём их субъектные
- Команды работы с оболочкой - назовём их объектные
Объектные команды, это к примеру: команда сохранения файла, выхода из
системы, вывода нумерации строк, запуска внешней утилиты и тд. Эти команды
начинаются с символа двоеточия - :.
Субъектные команды же представлены следующими шаблонами в зависимости от типа дочернего режима:
- В относительном режиме:
сказуемое обстоятельство подлежащее - В абсолютном режиме:
обстоятельство сказуемое
Сказуемое это собственно сама команда, к примеру d - удаление.
Обстоятельство, это количество раз, необходимое применить к подлежащему.
Подлежащеее, это объект воздействия, к примеру w - слово.
У Vim есть буфер undo. Команда u отменяет последние изменение, команда
U отменяет последние изменения для данной строки. Ctrl + r возвращает
отменённое изменение.
Подлежащее
В документации подлежащее так же называется motion - движение. В диаграмме
ниже я назвала эту идею - движение и шаг. В случае, если в относительном
режиме в качестве подлежащего используется сама команда, то подлежащим
полагается вся строка.
Примеры подлежащего:
| Режим | ||
|---|---|---|
^ |
Начало строки | Относительный |
$ |
Конец строки | Относительный |
$ |
Конец файла | Абсолютный |
w |
Начало следующего слова | Относительный |
e |
Конец данного слова | Относительный |
Обстоятельство
В диаграммениже обстоятельство названо - модификатором. В случае, если в относительном режиме опущено обстоятельство, последнее полагается равным единице.
Обстоятельство % переводиться в 1,$.
Примеры обстоятельства:
| Режим | ||
|---|---|---|
i |
Исключая пробелы | Относительный |
a |
Включая пробелы | Относительный |
t |
До подлежащего, не включая | Относительный |
f |
До подлежащего, включая | Относительный |
2 |
Два, относительно курсора | Относительный |
2 |
Вторая строка | Абсолютный |
1,3 |
От первой до третьей строки | Абсолютный |
% |
Весь файл | Абсолютный |
Сказуемое
У сказуемого есть условное наклонение глагола. Команда поданная с малой буквой обычно производит небольшие изменения, а с большой - большие.
В осутствии сказуемого предполагается действие навигации - перемещение.
В абсолютном режиме после символа ! можно использовать команды терминала.
Если при этом использовано обстоятельство, то оно описывает область действия
вызываемой команды, если нет, то vim временно перейдёт в режим вывода команды.
Примеры сказуемого:
| Режим | ||
|---|---|---|
d |
Удалить текст относительно курсора | Относительный |
y |
Копировать текст относительно курсора | Относительный |
d |
Удалить строки | Абсолютный |
y |
Копировать строки | Абсолютный |
p |
Вставить текст из буфера | Относительный |
o |
Открыть новую строку под курсором и начать ввод | Относительный |
O |
Открыть новую строку над курсором и начать ввод | Относительный |
i |
Начать ввод текста с данной позиции | Относительный |
I |
Начать ввод текста с начала строки | Относительный |
a |
Начать ввод текста со следующей позиции | Относительный |
u |
Отменить последнее изменние во всём тексте | Относительный |
U |
Отменить последнее изменние для данной строки | Относительный |
! |
Запустить команду терминала | Абсолютный |
Примеры относительного режима
d20w- удалить 20 слов в положении курсора
y2y- копировать две строки от положения курсора включая
Отсутствие обстоятельства:
dd- удалить одну строку в положении курсора
Наклонение сказуемого:
a- Начать добавление текста после буквы на которой находится курсор
A- Начать добавление текста с конца строки
Отсутствие сказуемого:
2e- переместиться к концу второго слова исключая пробел
И в общем перемещения:
w- от позиции каретки до конца слова, включая последующий пробел
e- от позиции каретки до конца слова, исключая последующий пробел
$- от позиции каретки до конца строки, включая последний символ
Примеры абсолютного режима
20d- удалить 20-ую строку
w- сохранить файл
%!xxd- перевести файл в двоичный формат
%!xxd -r- перевести файл обратно из двоичного формата
Далее диаграмма состояний
Сначала пройдите святой vimtutor, который имеет перевод на русский язык:
vimtutor ruПосле прохождения vimtutor запустите сам Vim и ознакомтесь с системой
помощи. Помощь по конкретному разделу вызывается командой :h[elp] <раздел>.
Когда открываете помощь, увидите как бы ссылки, это оглавление и slug-и глав.
Эти slug-и используются так же, как опция при вызове :h. Вы можете пройти по
ссылке встав на неё, и нажав на Ctrl + ]. Папримеры вызова справок:
:h vundle
:h vundle-intercativeДля вывода главной справки на русском:
export LANG=ru_RU.UTF8
man vim
# Или
man -L ru vimОзнакомьтесь со следующими документами:
Конфигурация vim для пользователя хранится в файле HOME/.vimrc,
настоятельно рекомендуем добавить автонумерцию строк. Комметарием в файле
.vimrc являются двойные кавычки: ". Далее пример небольшой настройки среды
Vim:
" Нумерация строк
set nu
" Четыре пробела заместо таба
set tabstop=4 shiftwidth=4 expandtab
" Заприщает vi вместо vim
set nocompatible " be iMproved, required
" Интеграция мыши
set mouse=aКак вы видете установка опции происходит с помощью команды set. Часть опций
являются бинарными: да/нет. Они не принимают дополнительных параметров и
имеют команду отмены начинающуюся с no. К примеру установка и отмена
нумерации строк:
set nuset nonu
У части опций есть параметр, который они принимают после знака =, к примеру
режим интеграции мыши:
set mouse=n- интеграция мыши в режиме терминалаset mouse=a- интеграция мыши во всех режимахset mouse=""- отмена интеграции мыши
В Vim есть две команды ряд команд касательно обработки tab-ов. Вы можете
прочитать о них болшьше, используя помощь Vim, набрав :help имя_команды:
tabstopshiftwidthsmarttabexpandtab
Если вы установили в .vimrc expandtab и работаете с Makefile-ом, где вам
необходимо вставить реальный символ tab-а, воспользуйтесь отменой режима
расширения tab-а:
:set noexpandtabВ Vim интегрирована поддержка Python-а, что можно узанть вызвав
vim --version, и найдя в выводе: +python, +python3. Если заместо +
стоит -, значит какая то поддержка отсутствует.
Мышь лучше не активировать, дабы пользоваться контекстным меню графического
терминала и иметь возможность копировать текст в буфер обмена. Но если вы
хотите всё же использовать интегрированную мышь, то добавьте :set mouse=a
в .vimrc. Изучите режимы мыши вызвав :help mouse.
Большинство настроек консолидированы в файле .vimrc.
Полезные команды vim:
:%!xxd- вывод шестнадцатиричного представленияCtrl+G- показать имя данного файлаCtrl + T,Ctrl + O- навигация вперёд-назадdiw- забор слова в буфер с удалениемyiw- забор слова в буфер без удаления
В Vim можно интегрировать мышку. Тогда кнопки toolbar-ов и ссылки будут
кликабельны. Для этого задайте set mouse=a. Если вы хотите скопировать текст
как раньше, быз интеграции мыши, так что бы текст попал во внешний буффер
обмена, выделяйте текст с нажатой клавишей Shift. Не отпускайте Shift и
нажмите на правую клавишу мыши, для вызова контекстного меню. При выделении и
копировании очень удобно отключить нумерацию строк: :set nonum.
При удалении какого то количества строк, удобно перед этим включить режим
относительной нумерации: :set relativenumber.
Vim имеет систему окон, о которых написано выше, а так же систему табов.
TODO: это заготовка статьи, расширить
Команды работы с табами:
:tabedit <file_name>- Открыть таб с новым файлом:nextn- следующий таб:nextp- предыдущий
TODO:
:nextnи:nextpпочему то не работаю, проверить
Если включена интеграция мыши, вы можете перемещать по табам с мышкой.
Как известно, Vim поддерживает систему разбиения экрана. Большинство экранных
команд начинаются на Ctrl + w, где w предположительно - Window. Далее
список оконных команд. Разбиение окна:
Ctrl + w + s- Разбиение данного окна по горизонталиCtrl + w + v- Разбиение данного окна по вертикали
Навигация совершается с помощью двух груп клавиш: w для навигации
против часовой стрелки, j, k, h, l для навигации в том же направлении
в каком эти клавишим двигают курсор будучи самостоятельными командами.
Вот подсказка, которую я копирую из vimtutor ru:
^ Подсказка.
k Клавиша h слева и удобна для перемещения влево.
< h l > Клавиша l справа и удобна для перемещения вправо.
j Клавиша j похожа на стрелку "вниз".
v
Ctrl + w + w- активация следующего против часовой стрелки окнаCtrl + w + [jkhl]- активация окна в зависимости от направления
Размеры окон вы можете менять двумя способами:
- По размеру единичного символа и строки за раз
- Указывая точные размеры увеличения и уменьшения
Единичные изменения:
Ctrl + w + <- уменьшение ширины на единицуCtrl + w + >- увеличение ширины на единицуCtrl + w + -- уменьшение высоты на единицуCtrl + w + +- увеличение высоты на единицу
Учтите, что при использовании клавиш
+и-вам нужно сначала отпуститьCtrl + w, иначеKonsoleперехватит комбинацию, и изменит шрифт. Для возвращения размера фонта в его прежнее состояние, войдите в меню трёх горизонтальных палочек справа вверху ->Reset font size
Количественных изменений можно добиться используя команду winc[md]. Вот
примеры достаточно понятные интуиттивно:
:30winc >- увеличение ширины на30:30winc <- уменьшение ширины на30:10winc +- увеличение высоты на10:10winc -- уменьшение высоты на10
При разбиении окна ваш файл продублируется, его изменение будет происходить
синхронно. Для открытия нового файла выполните команду :o <path>. Вы можете
передать имя папки в виде аргумента, тогда перед вами откроется что то
наподобии левой панели старого доброго Norton Commander-а. Вот важные
объектные команды:
:o[pen]- открыть файл:clo[se]- закрыть активное окно:q[uit]- так же закрывает активное окно
Важны команды навигации по истории открытых файлов в данном окне:
Ctrl + o- переход в истории назадCtrl + i- возврат в истории вперёд
Для открытия файлов удобно использовать плагин FuzzyFinder о
котором речь пойдёт далее. Настроив расширения Vim, как описано ниже,
вызовите: :FufFile и набирая начало имени файла найдите его в списке,
перейдите на него, нажмите <ENTER>. Это намного удобнее, чем команда :o.
Но в режиме Termdebug, к примеру :FufFile не работает так, как ожидается.
Используя команду :o вы можете совершать поиск по списку с помощью /.
В Vim существует режим замены строки. Он вызывается командой :c. Я решила
скопировать блок помощи по этой нетривиальной команде. В работе с Vim есть
две фазы:
- Выйти из
Vimесли случайно запустили его в терминале - Выйти из режима замены строки, если случайно вызвали его в
Vim
:c :ch :change
:{range}c[hange][!] Replace lines of text with some different text.
Type a line containing only "." to stop replacing.
Without {range}, this command changes only the current
line.
Adding [!] toggles 'autoindent' for the time this
command is executed.
This command is not supported in Vim9 script,
because it is too easily confused with a variable
name.Для вызова команды системы из вне Vim, наберите эту команду после :!. К
примеру:
:!sh rebuild.loc.shОбратите внимание, что в оболочке Vim у вас не получится эспортировать
переменные командой source (или точка .). Вам нужно выполнить source в
том терминале, где вы запускаете Vim до его запуска.
- Русские страницы
man-а по раполагаются адресу:/usr/share/man/ru/man1 - В
Vimесть командаpythonкоторая всегда вызываетpython2 - Отдельно есть команда
python3 - Файлы плагинов
Vimимеют расширение.vim
У Vim есть святой манагер плагинов: Vundle. Установите его с помощью:
git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vimПлагитны git-а должны храниться в папке ~/.vim/bundle/. Vundle работает
с плагинами в формате git репозитория.
При разработке плагина, изменяйте его прямо в папке ~/.vim/bundle/<plugin> и
только уже готовую версию грузите в репозиторий. Постоянные :PluginClean,
:PluginInstall при разработке, это не вариант, так как требуют слишком много
телодвижений.
Вот необходимая конфигурация для Vundle. Добавьте следующие строки в
~/.vimrc:
filetype off " required
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
Plugin 'VundleVim/Vundle.vim'
Plugin <Plugin1>
Plugin <PluginN>
"Plugin 'file:///.../CtrlK'
call vundle#end() " required
filetype plugin indent on " requiredКак вы понимаете плагины добавляются в строках начинающихся с Plugin. Каждый
идентификатор плагина должен быть обрамлён одинарной кавычкой. В зависимости от
указания имени плагина, плагин ищется в следующих местах:
| Формат имени | Пример | Область поиска |
|---|---|---|
несколько частей uri |
VundleVim/Vundle.vim |
В корне github (1) |
один slug |
FuzzyFinder |
В vim-script (2) |
начинается с file:// |
file:///.../CtrlK |
Локально |
(1) https://github.com/
(2) https://github.com/vim-script
Рекомендуется установить следующие плагины из vim-script:
FuzzyFinderL9
Удаление плагина просиходит только если вы удалите строку из .vimrc,
добавление если добавите.
Вот некоторые команды Vundle, они основаны на списке плагинов получаемом из
.vimrc:
:PluginInstall- Устанавливает плагины (1):PluginUpdate- Обновляет:PluginClean- Удаляет плагины (2)
(1) Плагины которых нет в ~/.vim/bundle/<plugin>
(2) Плагины представления которых нет в .vimrc
Перед тем, как мы начнём пользоваться плагином Termdebug для Vim,
стоит освоить чистый GDB из командной строки.
Используйте следующие команды:
fileдля загрузки запускаемого файла или динамической библиотекиbreakдля точки остановаstepдля входа в функциюnextдля шага без входаfinishдля выхода из функцииdisplayдля вывода значения выраженийkillдля досрочного завершения процесса
Все команды можно сокращать до минимальной уникальной последовательности.
| Команда | Сокращение |
|---|---|
break |
b |
step |
s |
next |
n |
finish |
f |
Для break передайте в качестве аргумента имя файла и через двоеточие номер
строки. Полный путь можно опустить. При выводе строк с помощью display при
нераспознанной кодировке, вы получите удобный вывод в восмиричном формате:
person->name = "\123\123\123\123 \123\123\123\123\123\123\123\123"
Все библиотеки и запускаемый файлы должны быть собраны с ключём g++ -g для
включения символов отладки.
Пример сессии.
gdb
> file programm
> file common.so
> break main.cpp:353
> break common.cpp:157
> s
> n
> f
> display person->name
> killВопервых ознакомьтесь с некоторыми мануалами:
К сожалению я не нашла официальной документации Termdebug в интернете, но
есть два иных источника:
- Официальная документация вызываемая с помощью:
:h terminal-debug - Клон репозитория Vim
В общем вы можете найти все команды в самом коде плагина в клоне репозитория
Vim выше, но справка конечно несомненно удобнее!
:help terminal-debugОтлаживаемая программа должна быть скомпилирована с опцией -g переданной в
gcc. Если вы собираете с CMake, то CMAKE_BUILD_TYPE должен быть одним из:
DebugRelWithDebInfo
В .vimrc следует установить следующие опции:
packadd termdebug
let g:termdebug_wide=1Таким образом мы:
- Активируем
termdebug - Создаём горизонтальное разделение экранов
Там же установите сопоставление горячих клавишь для отладки. Я использовала свои настройки, но вы можете их переопределить. Далее по мануалу я буду ссылаться к своим настройкам:
map <C-F5> :Run<CR>
map <F5> :Continue<CR>
map <F7> :Over<CR>
map <F8> :Step<CR>
map <F6> :Finish<CR>
map <F9> :Break<CR>
map <S-F9> :Clear<CR>Мы используем Shift в <S-F9>, так как <С-F9> зарезервирован в
OpenSuse. Не стоить мапить :Termdebug, так как удобнее, используя
автозаполнение вызвать :Termdebug /path/to/executable и сэкономить на
написании file /path/to/executable в окне gdb, с другой стороны можно
замапить прямо с именем экзешника. Так же обратите внимание на <CR> вконце
каждого сопоставления. Эта конструкция позволяет сразу запустить команду,
иначе вам придётся вручную нажимать Enter.
После каждого изменения кода, его нужно пересобрать, вызвав
:! sh <скрипт_пересборки>, а затем снова загрузить символы командойfile
В режиме Termdebug очень удобно интегрировать мышь, так как мы сможем с её
помощью перемещаться по экранам а так же менять размер окон. Если нам нужно
будет скопировать текст в буфер обмена, мы можем деактивировать эту настройку.
Так же мы получим замечательные кнопочки вверху экрана для выполнения
отладочных шагов. Если вы включите интеграцию мыши в действующим сеансе
Termdebug для всплытия кнопочек, вам придётся перезагрузить сессию.
Следовательно, в идеале установите интеграцию мыши уже на уровне .vimrc:
set mouse=a- включить интеграцию мышиset mouse=""- отключить интеграцию мыши
TODO: актуализировать тему интеграции мыши по мануалу
Вот в общем список команд и их значеня:
:Step- войти в функцию:Over- не входить в функцию:Finish- выйти из функции:Continue- продолжить до следующей точки останова:Stop- предположительно послать сигналkill(уточнить):Break- установить точку останова:Clear- убрать точку останова:Run- начать запуск:Evaluate {expression}- расчитать значение:Up- на окно стека вверх:Down- на окно стека вниз:Winbar- мышевоеguiменю отладчика
Немного о командах, их три категории. При активации определйнного окна, становятся доступными первые две категории команд, третья категория доступна всегда, но будет влиять на активное окно:
- Команды
Vimнабранные при активном окне кода в режиме команд (Esc) - Команды
Gdbнабранные при активном окнеGdbв терминале - Команды перехода между окнами и изменения размеров окон
В режиме команд
Vimработает автозаполнение табуляцией и сокращения команд
В Vim открываем нужный файл командой :o. Затем запускаем отладчик командой
:Termdebug. Переключаемся между окнами следующим образом. Вызываем
комбинацию Ctrl + w, затем отпускаем и нажимаем одну из клавиш:
[вверх, вниз, впрао, влево]. Так же можно нажать Ctrl + w + w для движения
против часовой стрелки. Ctrl + w + l - переход на окно с кодом.
Команды vim в общем то можно запускать лишь при фокусировке на правом окне с
кодом. При открытия дополнительных файлов командой :o в режиме отладчика
автозаполнение работать не будет, но вы можете написать лишь папку, и vim
выведет вам проводник, где вы с помошью навигации сможете выбрать нужный файл.
Перед вами три окна:
- Верхнее слева: окно
Gdb - Нижнее слева: окно терминала программы
- Справа: окно кода
Возможно будет удобно уменьшить окно терминала программы комбинацией или расширить окно кода, вот комбинации. Для необходимого эффекта следует выполнить многократно:
- Уменьшить по вертикали:
Ctrl + wотпускаем и нажимаем- - Увеличить по вертикали:
Ctrl + wотпускаем и нажимаем+ - Увеличить по горизонтали:
Ctrl + wотпускаем и нажимаем<(Shift + ,) - Уменьшить по горизонтали:
Ctrl + wотпускаем и нажимаем>(Shift + .)
Так же в режиме команд в окне кода можно использовать:
:30winc >- увеличиваем ширину на 30:30winc <- уменьшаем ширину на 30:resize 30- выставляем высоту в 30
При переходе внутрь функции, если функция в другом файле,
Gdbавтоматом откроет этот файл
При активации окна терминала программы, ввод будет передан непосредственно в запущенный и отлаживаемый процесс. Далее:
- В окне
Gdbзагружаем файл командойfile path/to/bin - Выставляем точки останова дойдя до нужной строки и вызвав
F9 - Вызываем
runв окнеGdb
Начинаем дебажить используя F5, F7, F8. Соответствия смотрите выше. Для
вывода панели комманд, необходимо вызвать :Winbar.
Расчёт значения выполняется с помощью команды :Evaluate {expression}. Без
выражения расчитается значение под курсором. Такой же эфект будет при нажатии
Shift + k.
Как сказано выше, вы можете вводить различные команды в окне Gdb. Справку
по командам вы можете получить с помощью help и help с именем конкретной
команды. В общем большинство команд Termdebug в режиме Vim это абстракция
над командами Gdb. Далее ряд полезных команд Gdb:
file- загрузить бинарный файл с символами отладкиbacktrace- выводStacktrace-аwhere- то же самоеkill- прекратить данный сеанс отладкиd- удалить всеточки остановаthread find <regex>- вывод потоков соответствующих шаблонуt <number>- переход на поток с определённым номером
Для того, что бы вывести все потоки, наберите: thread find .*. Все действия
плагина Termdebug вы можете выполнить из окна Gdb. Например установка
точки останова на 25 строке выполняется с помощью b 25, а переход на
следующую команду: n и ni (уточнить по поводу перехода с вхождением и без).
Для выхода из режима отладки, вводим quit в окне Gdb
TODO: понять как взаимодействовать с левым нижним окном вывода; если к примеру остальные окна закрыты, то система виснет; так же
FufFileвсегда открывает файлы в окнеgdb
Учитывая особенность FufFile открывать файл в левой верхней части,
пользуйтесь командой :o, при этом вы можете использовать команду поиска: /.
Если вы случайно открыли файл с помощью FuzzyFinder-а, и он открылся
в окне gdb, нажмите Ctrl + o для возврата.
Иногда команды Termdebug начнут подвисать и не вызывать ни каких действийю. В
таком случае вызовите аналогичную команду в окне Gdb.
В Vim можно настроить навигацию по коду в C++ по вот этому
святому мануалу.
По указанным ссылкам находятся устаревшие проекты, которые нельзя собрать в
наши дни, в связи с этим я портировала эти проекты на Python3:
Склонируйте оба репозитория. Установите пакет разработки python3:
sudo zypper install python311-develТем или иным образом установите libclang-devel. Если в текущем состоянии
вашего дистрибутива у вас нет необходимых пакетов, собирите llvm по
инструкции в часте посвещённой OpenSUSE.
Найдите версию вашей сборки libclang, если вы устанавливали через систему
управления пакетами, то воспользуйтесь одной из следующих команд:
# С помощью locate, если вы создали соответствующую базу
locate libclang
# С помощью zypper
zypper packages --installed-only | grep libclangЕсли же вы собирали собственную сборку, то версия закодирована в использованном
теге git-а.
Перейдите в репозиторий py-ctrlk, создайте виртуальную среду, активируйте её:
python3 -m venv .venv
source .venv/bin/activateДалее установите python-овский clang. Перед этим найдите соответствующую
версию:
pip index versions clang
pip install clang==<VER>Если до этого, вы установили ошибочную версию, используйте:
pip uninstall clangTODO: актуализировать
Python-овский clang просит so-шник в формате libclang-<VER>.so, а мы
имеем формат libclang.so.<VER>. Перейдите в папку /usr/lib64 и выполните:
sudo ln -s libclang.so.<VER> libclang-<VER>.so, давлее sudo ldconfig.
Собирите и установите py-ctrlk, как указанно в мануале:
python setup.py build
sudo python setup.py installВ конфигурации Vundle заместо Plugin 'SkidanovAlex/CtrlK'
напишите: Plugin 'file:///home/<user>/repos/CtrlK' заменяя <user> на
своего пользователя, если склонировали репозиторий CtrlK в
/home/<user>/repos/CtrlK.
Не прописывайте опцию: let g:ctrlk_clang_library_path="/home/user/llvm/lib",
так как py-ctrlk собран с актуальным и доступным из системы libclang-ом.
Возможно вам всё таки придётся установить его в
let g:ctrlk_clang_library_path="/usr/lib64"
Задайте клавиши для основных команд CtrlK:
nmap <F3> :call GetCtrlKState()<CR>
nmap <C-k> :call CtrlKNavigateSymbols()<CR>
nmap <F4> :call CtrlKGoToDefinition()<CR>
nmap <F12> :call CtrlKGetReferences()<CR>Запустите тесты в репозитории py-ctrlk:
cd test
./test.pyТак же есть
try.py, но его необходимо доработать, тк он входит в бесконечный цикл
Я добавила два скрипта:
kill.sh- убивает серверctrlkrebuild.sh- пересобирает и публикует модуль
Модуль в процессе портирования, и пока не работает.
Для отладки Python-а в модуле, используйте следующую конструкцию:
with open('/path/to/log', 'a') as the_file:
the_file.write('info line\n')Так же добавила функцию MyRequestHandler.write_error результат которой
должен оказываться в vim в статусной сроке. Но функция пока тоже не работает
как ожидается.
На данный момент удалось пройти следующую строку в файле client_api.py
indexer.start(self.leveldb_connection, n_workers)Как только этот проект поднимиться, это будет нечто фантастическое!
