Коллекции загружаются
К моему же собственному удивлению, пристрастился к виму. Оказывается, это офигенно удобно, когда не нужно убирать пальцы с букв (на del, backspace, клавиши курсора, etc). Удобно-удобно-удобно… А потом бац — натыкаешься на какую-нибудь фигню, в которой вим до жути дубовый и неудобный. Например, на то, как он делает вставку. И всё, хочется залепить кулаком в экран. И уж точно времени тратится куда больше, чем если бы я это же делал в каком-нибудь другом редакторе.
#IT #Лытдыбр 25 января 2020
4 |
Вообще, можно же юзать Ctrl+w — это стандартная комбинация для удаления предыдущего слова. Не знал. Прост по другим редакторам привык к Ctrl+Del, Ctrl+BS, Ctrl+Left(Right), а в режиме редактирования не работает w b dw db, вот я и пробовал сделать привычные штуки.В общем, кусок моего конфига: " Так работает На самом деле с копированием-вставкой этот кусок конфига недоделанный и уже заброшенный. Я пользуюсь ConEmu, а оно ведёт себя немного не так, как cmd. И тут щас на другом ноуте есть отличия от того, что уже было. Буду ещё экспериментировать. Но с бекспейсом не работало ни на предыдущем, ни на этом ноуте.imap <C-z> <Esc>u " без этого nvim переходит в какой-то странный режим и я не могу его оттуда достать nmap <C-z> u nmap <C-a> <Esc>ggVG imap <C-a> <Esc>ggVG imap <C-c> <Esc>"*y nmap <C-c> <Esc>"*y vmap <C-c> "*y imap <C-v> <Esc>"*p nmap <C-v> "*p imap <A-v> <C-v> nmap <A-v> <C-v> imap <C-v> <Esc>"*p " а вот здесь какая-то проблема — вставляет в поле команд Примечание для блога: уже не помню, что имелось в виду. Да, была какая-то фигня с вставкой текста из буфера обмена в командный режим, но явно как-то не так. " nmap <C-v> "*p " Так работает imap <C-Del> <Esc>ldei " imap <C-Del> <Esc>dea " предыдущий вариант " а так нет " imap <C-BS> <Esc>dbi " и так нет " imap <C><BS> <Esc>dbi " и даже так (пробовал для эксперимента) " inoremap <BS> <Esc>dbi С бекспейсом что получается — что бекспейс, что контрл-бекспейс в режиме вставки несмотря на вон те попытки выше (и без них тоже) удаляет одну предыдущую букву, и всё. noremap! <C-BS> <C-w> Тоже не работает, удаляет одну предыдущую букву и всё. Кстати, что означает <C-h> — контрол плюс аш?noremap! <C-h> <C-w> И ещё, про бекспейс я пробовал и в конэму, и в цмд. Во-первых, по-умолчанию оно будет удалять только слова вставленные после последнего перехода в insert-режим И даже это не сработало, хотя когда я эту фразу прочитал, подумал, что дело именно в этом (и если бы это оказалось так, то это меня взбесило бы — очередное неуместное проявление искусственного интеллекта там, где его быть не должно).И да, бекспейс в нормальном режиме делит окно вима пополам и дублирует в него текущий редактируемый файл. И вроде бы это не из-за моих экспериментов. Я себе конфиг вообще-то сделал такого вида: source $VIM/config/encoding.vim И пока ещё в нём можно ориентироваться :-)source $VIM/config/plugins.vim source $VIM/config/keybinding.vim source $VIM/config/statusbar.vim source $VIM/config/windows.vim source $VIM/config/config.vim |
Wave
Кстати, что означает воскл знак после noremap? Это значит, что комбинация будет действовать в Insert и Command-Line режимах.И что означает <C-h> — контрол плюс аш? А это и есть бэкспейс — удаление символа слева от курсора.Проблема в вима с <C-BS>, увы. У меня тоже не получилось забиндить, он тупо не видит разницу между BS и C-BS. Можешь попробовать: :inoremap <BS> ABC Он будет вставлять ABC и по нажатию BS и по нажатию C-BS. Ctrl+h работать не перестанет. |
Wave
Такой вопрос: на что ты себе намапил клавишу лидер? Оно вроде бы как удобней всего на пробел её мапить, и очень часто так и советуют делать, но вместе с тем бывают и… Короче, та же фигня, почему ты мне не советовал переопределять эскейп. Как раз лидер можешь переназначать как тебе угодно. Плагины (и ты сам тоже должен так делать) маппят не на конкретную клавишу, а на <Leader>, т.е. если ты её изменишь (в конфиге), то все плагиновские шорткаты будут работать уже с новой клавишей. |
Это значит, что комбинация будет действовать в Insert и Command-Line режимах. Я это углядел, отредактировал коммент, убрав вопрос, но ты уже ответил :)Он будет вставлять ABC и по нажатию BS и по нажатию C-BS. Ctrl+h работать не перестанет. Да нет же. Он у меня почему-то всё равно, как я ни извращаюсь, в режиме вставки любой комбинацией бэкспейса или чистым бэкспейсом удаляет символ слева, если не на начале строки, а в нормальном режиме делит экран пополам (и ещё раз пополам, и ещё).Как раз лидер можешь переназначать как тебе угодно. Плагины (и ты сам тоже должен так делать) маппят не на конкретную клавишу, а на <Leader>, т.е. если ты её изменишь (в конфиге), то все плагиновские шорткаты будут работать уже с новой клавишей. Я не о том. Я знаю, что лидер может быть любым, просто если ставить его на пробел, то получается слишком много мелких неудобностей, потому что пробел сам по себе задействован несколько чаще остальных клавиш. Вот та штука, которую ты в следующем комменте описываешь, вылазит. Поэтому и интересуюсь, может, кто-то что-то более удобное предложит. Второй по частоте совет ставить лидер на запятую. И вот это оказывается охрененно неудобно. Во-первых, по ней я тоже, бывает, промахиваюсь. Как и по квадратным скобкам и цифрам в верхнем ряду. А во-вторых, всё тот же русский язык. |
Wave
Да нет же. Он у меня почему-то всё равно, как я ни извращаюсь, в режиме вставки любой комбинацией бэкспейса или чистым бэкспейсом удаляет символ слева, если не на начале строки, а в нормальном режиме делит экран пополам (и ещё раз пополам, и ещё). А вот это странно... Покажи что выведет в файлик:redir! > vim_keys.txt :silent verbose map :silent verbose map! :redir END |
Wave
Так а как замапить Home и End и главное, как в режиме редактирования прыгать на начало-конец строки? А то не прикалывает делать <Esc>A или <Esc>I особенно учитывая, что я так и не определился с тем, чем же заменить себе эскейп. Можешь пока использовать C-a и C-e — это ридлайновские Home/End (правда Home кидает в начало строки, а не текста на строке). Я попозже доберусь до компа с полноразмерной клавиатурой и посмотрю, что там у меня с Home/End.но кто ж знал (и этот нект тоже), что <C-h> это у нас <BS> Смотри, вот тут есть стандартные шорткаты readline, можешь подсматривать, чтобы случайно не переопределить :)И с копированием-вставкой я запутался конкретно. Я тоже :) В чём там проблема была? |
Если ты используешь ConEmu, то ты можешь в нём самом определить комбинацию Ctrl-BS, чтобы он посылал Ctrl+w :) Я сейчас попробовал в своём терминале, работает :)
Упд: кстати, у него уже такое есть в настройках. |
Если ты используешь ConEmu, то ты можешь в нём самом определить комбинацию Ctrl-BS, чтобы он посылал Ctrl+w :) Я сейчас попробовал в своём терминале, работает :) Не-не! В этом же самом конэму у меня работает и фар.Upd. Глянул, что там имеется в виду. Ни одно состояние 3-state переключателя не меняет поведения вот этого вот ни при наличии, ни при отсутствии noremap! <C-BS> <C-w> Если что, интерес разобраться тут у меня чисто спортивный, чтобы знать, что это нафиг такое. Так- то мне достаточно того, что есть шоткат для того, что мне нужно. Который к тому же работает и в русской раскладке. Можешь пока использовать C-a и C-e Эххъъ. Хрен редьки не слаще. На C-a у меняnmap <C-a> <Esc>ggVG imap <C-a> <Esc>ggVG А C-e прокручивает текст на строку вниз, оставляя курсор в предыдущей строке. Это, насколько помню, стандартный вимовский шоткат. Я тоже :) В чём там проблема была? Во всём разом: а) у вима есть свой буфер обмена, б) два режима вставки: с отступами и без, в) поверх этого вмешивается конэму и тоже в двух режимах (всё портить и бибикать ©). В фаре не вмешивается, а тут вмешивается.Ночью я было обрадовался, найденный плагин работает полностью так, как мне надо: if exists("g:loaded_bracketed_paste") Пофиг, что я это почти не понимаю. Пофиг что шоткат Ctrl+Shift+V — привыкну. А вот сейчас сижу экспериментирую, и опять вылазят траблы. Во-первых, в русской раскладке не работает. Во-вторых, опять хрен знает где вставляет: может со следующей строчки, а может в позицию после курсора (p — на символ дальше).finish endif let g:loaded_bracketed_paste = 1 let &t_ti .= "\<Esc>[?2004h" let &t_te = "\e[?2004l" . &t_te function! XTermPasteBegin(ret) set pastetoggle=<f29> set paste return a:ret endfunction execute "set <f28>=\<Esc>[200~" execute "set <f29>=\<Esc>[201~" map <expr> <f28> XTermPasteBegin("i") imap <expr> <f28> XTermPasteBegin("") vmap <expr> <f28> XTermPasteBegin("c") cmap <f28> <nop> cmap <f29> <nop> Вот это меня бесит неимоверно. Я вижу, где стоит курсор. Я говорю редактору что-то сделать, например, вставить текст из буфера обмена. А он берёт и делает это на символ дальше от курсора. И да, ты уже объяснял, но всё равно это нахрен неудобно. Возможно, пока что, пока не искривлю свои пальцы под вим. |
Wave
Вот это меня бесит неимоверно. Я вижу, где стоит курсор. Я говорю редактору что-то сделать, например, вставить текст из буфера обмена. А он берёт и делает это на символ дальше от курсора. И да, ты уже объяснял, но всё равно это нахрен неудобно. Возможно, пока что, пока не искривлю свои пальцы под вим. Стоп, про это я ничего не объяснял. Только про выход из insert-режима.Если хочешь вставлять текст в позицию курсора, то вместо p используй gP. Можешь забиндить: nnoremap p gP Только аккуратно, если пользуешься всякими xp, ddp — они поломаются с новым биндингом. |
Wave, inoremap! — такой команды нет. Есть inoremap и noremap! :)
Сделай такую штуку: нажми Ctrl+v, затем backspace, и посмотри, что получится. На «это» и забиндь C-h. |
Вообще, это глюки не конкретно vim/neovim, а конкретных реализаций readline, под которыми они работают.
|
Всё равно не получается. Вставляется <BS> и <C-BS> соответственно, а при попытке намапить в редакторе вставляется Îx и ^_
|
Ладно, нахрен, я спать. Точно уж, софт для красноглазиков.
|
Wave
бекспейс упирается в то, что было до нажатия A и останавливается намертво Я уже про это говорил::set backspace=indent,eol,start |
Wave
Всё равно не получается. Вставляется <BS> и <C-BS> соответственно, а при попытке намапить в редакторе вставляется Îx и ^_ Вот это и попробуй намаппить (через noremap!) на C-h и C-w. |
Styx
Wave Не получается. Всё равно вставляется эта же белиберда.Вот это и попробуй намаппить (через noremap!) на C-h и C-w. |
Wave, а что за белиберда-то? :)
Попробуй ещё слить все маппинги в файл, как я показывал выше, и глянь, может это что-то где-то шалит. |
В общем, поковырялся ещё, используя метод половинного деления опять. Выяснил, что в приколах с бекспейсом виновата строка set term=xterm
Показать полностью
" 256 цветов в конэму. if !has("gui_running") set term=xterm set t_Co=256 let &t_AB="\e[48;5;%dm" let &t_AF="\e[38;5;%dm" inoremap <Char-0x07F> <BS> nnoremap <Char-0x07F> <BS> endif Чисто охота нормальную цветовую схему использовать, на 256 цветов, с жирным-курсивом-подчёркиваниями и прочими подобными мелочами. Но увы, либо то, либо это. Я, конечно, ещё поковыряю документацию что одного продукта, что другого, но… Неовиму в отличие от вима в данном случае требуется только set termguicolors И, да, проблему с map <C-BS> <C-w> решить не получается никак, но вот при запуске gVim нормально работают и бекспейс, и контрол-бекспейс. Надо гуёвому виму ещё подобрать шрифт как-то, потому что тот, который по умолчанию, сильно многого не хочет нормально показывать. Например, значки у NERDTree. Упд. Еле-еле выяснил, что писать в конфиге надо так: set guifont=DejaVu_Sans_Mono:h10 (с подчёркиваниями). А ещё, что выбор шрифтов там почему-то очень бедный, и что далеко не все значки, в отличие от конэму, отображаются. Слуш, пара мелочей: Как гвим распахнуть на весь экран при запуске? Нашёл только паллиатив set columns=999 set lines=999 При указании set encoding=utf8 nobomb меню гвима стало показывать иероглифы. Я сдеал по-простому, убрал меню (и тулбар) вообще. Но это тоже паллиатив. Ну и ещё такое: при первом старте гвим говорит что-то типа «библиотеки не зарегистрированы, зарегистрировать?» — что за библиотеки и как бы этот вопрос вообще убрать? Дело в том, что в силу виртуализации после перезагрузки всё возвращается на круги своя и эти библиотеки вновь незарегистрированы. |
Wave
Как гвим распахнуть на весь экран при запуске? Нашёл только паллиатив Ну это и есть обычный способ для вима :)set columns=999 set lines=999 При указании set encoding=utf8 nobomb меню гвима стало показывать иероглифы. Я сдеал по-простому, убрал меню (и тулбар) вообще. Но это тоже паллиатив. Должно быть utf-8 (с дефисом). :h encoding-namesНу и ещё такое: при первом старте гвим говорит что-то типа «библиотеки не зарегистрированы, зарегистрировать?» А покажи точный текст ошибки. |
Должно быть utf-8 (с дефисом). :h encoding-names Без этой опции, с дефисом или без, всё нормально. |
Wave
Без этой опции, с дефисом или без, всё нормально. Тогда сделай так: запусти вим без этой опции, потом запусти команду: :set encoding? Посмотришь, какая кодировка активная, и добавь её же в настройки, но с добавление "nobomb".На самом деле эта фигня означает, что один раз за сеанс винды я при запуске gvim должен лишних два раза нажать enter (или каждый раз выбирать нет). Прост слегка раздражает. Ага, понял. Сделай какой-нибудь autoexec.bat (или что там нынче) в котором пропиши:<path-to-gvim>\gvim -silent -register Чтобы он запускался каждый раз при старте винды и втихаря регистрировал что ему нужно. |
Что-то мне всё меньше нравится XP, хотя я на ней сидел, можно сказать, до последнего.
|
Wave, C-a/C-x для увеличения/уменьшения. Может случайно нажал? :)
|
Перед маппингом C-a можно сначала сделать unmap. Ну или vnoremap <C-a> добавь ещё.
|