LINUX.ORG.RU

можно ли вим настроить чтобы ctrl-ins/shift-ins понимал и «косил» под notepad


0

0

Никак не могу отучиться от ctrl-ins/shift-ins/ctrl-shift-arrow хоть в линухе работаю уже 10 лет..

У емакса есть режим pc-select в котором он эти клавишы понимает.

А у вима есть такой плагин? Чтоб еще не требовалось переключаться между режимом навигации и режимом вставки (помимо ctrl-ins/shift-ins). Чтоб прям как в notepad'е или любом тругом обычном редакторе (что для винды, что для Х11) можно было набивать текст?

anonymous

Можно. Только в консоли из-за проблем с клавиатурой будут жуткие баги, а в gvim всё нормально.

Стандартное решение - mswin.vim идёт в комплекте с vim, но оно занимает кроме удобных и свободных ctrl-ins/shift-ins/ctrl-shift-arrow некоторые нужные клавиши, так что его лучше подредактировать (и много много раз пропатчить, чтоб он не глючил в начале, конце строк и при работающем автодополнении, поэтому привидённый конфиг такой большой). (выдранная часть моего конфига, обеспечивающая требуемое поведение идёт следующим постом - чёртово форматирование)

Вообще я много лет пользовался [ctrl-]Shift-стрелки для выделения, сtrl-insert для копирования, shift-ins для вставки и shift-del для вырезания. Но потом меня осенило - зачем нажимать 2 клавиши если можно только одну и при этом без всяких режимов? (тем более это работает и в консоли). Теперь Insert - вставить, тот же Insert - скопировать, backspace - вырезать. (В приведённом конфиге это закомментировано). Сейчас привык - жутко удобно - ни пальцы гнуть, ни режимы переключать не надо.

Чтоб не требовалось переключаться между режимами навигации и вставки используйте :set insertmode

Чтоб иметь из этого режима доступ к командам режима навигации можно использовать <C-O> или <C-L>. Это неудобно, поэтому самые нужные из них (с десяток) я намапил на свободные клавиши (Fn, Esc, Tab не в начале строки) с помощью imap Fn <C-O>команда. Опять получаем самый часто необходимый функционал без режимов и изгибания пальцев.

GPFault ★★
()
Ответ на: комментарий от GPFault

if version >= 700
	set ve=onemore
endif
set nocompatible
set backspace=2

behave mswin

function! MapNormalOnly(what,for)
	execute "nnoremap ".a:what." ".a:for
endfunction
function! MapVisualOnly(what,for)
	if version >= 700
		execute "xnoremap ".a:what." ".a:for
	endif
endfunction
function! QuitCompletionmode()
	if pumvisible()
		return "\<Space>\<BS>"
	elseif mode()=="i" && col(".")>1
		return "\<Esc>a"
	else
		return ""
	endif
endfunction
function! MapInsertOnly(what,for)
	if version >= 700
		execute "inoremap <expr> ".a:what." QuitCompletionmode().\'<C-O>".a:for."'"
	else
		execute "inoremap ".a:what." <C-O>".a:for
	endif
	"execute "inoremap ".a:what." <Esc>a<C-O>".a:for
endfunction
function! MapSelectOnly(what,for)
	"execute "vnoremap ".a:what." ".a:for
	if version >= 700
		execute "snoremap ".a:what." <C-O>".a:for
	else
		execute "vnoremap ".a:what." ".a:for
	endif
endfunction

if has("clipboard")
	let g:RegisterForClipBoard="+"
else
	let g:RegisterForClipBoard="\""
endif

" SHIFT-Del,BS is Cut
"call MapSelectOnly("<BS>",'"'.RegisterForClipBoard.'x')
call MapSelectOnly("<S-Del>",'"'.RegisterForClipBoard.'x')
"call MapInsertOnly("<S-Del>",'"'.RegisterForClipBoard.'dd')

" CTRL-Insert is Copy
"call MapNormalOnly("<C-Insert>",'"'.RegisterForClipBoard.'yy')
call MapVisualOnly("<C-Insert>",'"'.RegisterForClipBoard.'y')
"call MapInsertOnly("<C-Insert>",'"'.RegisterForClipBoard.'yy')
call MapSelectOnly("<C-Insert>",'"'.RegisterForClipBoard.'y')

" Insert is Copy or Paste, depending on mode
""call MapNormalOnly("<Insert>",'"'.RegisterForClipBoard.'yy')
"call MapVisualOnly("<Insert>",'"'.RegisterForClipBoard.'y')
"call MapInsertOnly("<Insert>",'"'.RegisterForClipBoard.'P')
"call MapSelectOnly("<Insert>",'"'.RegisterForClipBoard.'y')

function! MapShiftInsert()
	execute "inoremap <S-Insert> <C-R><C-P>".g:RegisterForClipBoard
	execute "cnoremap <S-Insert> <C-R>".g:RegisterForClipBoard
	execute "vnoremap <S-Insert> \"-c<C-R>".g:RegisterForClipBoard
endfunction

call MapShiftInsert()

function! ReInitInGui()
	unmap <S-Insert>
	call MapShiftInsert()
endfunction

autocmd GuiEnter * call ReInitInGui()

set insertmode

GPFault ★★
()

> Чтоб еще не требовалось переключаться между режимом навигации и режимом вставки

http://cream.sourceforge.net
Жуткая вещь, но, может, кому и нравится.

BigBiker
()
Ответ на: комментарий от GPFault

И после этого ещё говорят что emacs трудно настроить... у него хоть на лиспе конфиг, а тут вообще непонятно что O_o

P.S.: не флейма ради... чесна очень удивился увидев этот конфиг...

Cy6erBr4in ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.