несколько вопросов

и другие vi-подобные редакторы

Модератор: /dev/random

Ответить
zls
Сообщения: 26

несколько вопросов

Сообщение zls »

Добрый день.

1) Вот в доках сказано
<C-LEFTARROW><C-RIGHTARROW> : jump one word backwards/forwards
но при нажатии на Ctrl со стрелками курсор по словам не скачет а вставляются a,b,c,d и перенос строки; в .vimrc есть строка "set nocompatible" , что не так

2) Вот хотел перебиндить большинство клавиш, но столкнулся с "небольшой" проблемкой
делаю так:

map <C-v> a - после этого по Ctrl-v соответственно происходит переход в режим ввода

теперь чтобы повесить на "а" например прыжок по словам делаю так:

map a w - после этоно при нажатии на "а" курсор перескакивает не следующее слово, но и по Ctrl-v теперь происходит тоже самое

как тогда можно действительно перебиндить горячие клавиши?

может на все эти "dd yy pp a i ..." горячие клавиши есть полные комманды,
которые позволят полностью перемапить все "с нуля" ?
например чтоб перенести режим вставки с "а" на Ctrl-a вместо:
map <C-a> a
можно написать:
map <C-a> :startinsert<Enter>

Или они зашиты в сырцах и мапить можно только на них или их сочетания?

3) чтоб реализовать автодополнение например для функций gtk делаю так:

Код: Выделить всё

ctags -R -f ~/.vim/systags /usr/include/gtk-2.0/gtk/
:set tags+=~/.vim/systags


но в файле ~/.vim/systags нет ни одной функции из инклудов например
GtkWidget* gtk_button_new (void); - для этой строки ничего нет в systags

а для этой строки

Код: Выделить всё

#define GTK_BUTTON_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_BUTTON, GtkButtonClass))


в systags создается строка
[cdoe]GTK_BUTTON_CLASS /usr/include/gtk-2.0/gtk/gtkbutton.h 41;" d[code]

и соответственно GTK_BUT дополняеися до GTK_BUTTON_CLASS

что делаю не так?

4) когда набираю :make то при наличии ошибок открывается дополнительное окно в котором содержится список ошибок, наведя курсор на ошибку и нажав Enter сверху открываеся окно с местом ошибки и курсор сразу перескакивает в это окно, можно сделать чтоб курсор оставался в окне списка ошибок?

Спасибо.

P.S. мой конфиг

Код:

set nocompatible set backspace=indent,eol,start set history=50 " keep 50 lines of command line history set ruler " show the cursor position all the time set showcmd " display incomplete commands set incsearch " do incremental searching map Q gq filetype plugin indent on autocmd FileType text setlocal textwidth=78 autocmd FileType html set omnifunc=htmlcomplete#CompleteTags autocmd BufReadPost * \ if line("'\"") > 0 && line("'\"") <= line("$") | \ exe "normal g`\"" | \ endif " Tab autocompletion function InsertTabWrapper() let col = col('.') - 1 if !col || getline('.')[col - 1] !~ '\k' return "\<tab>" else return "\<c-p>" endif endfunction imap <tab> <c-r>=InsertTabWrapper()<cr> set complete="" set complete+=. set complete+=k set complete+=b set complete+=t set completeopt-=preview set completeopt+=longest " Tag list settings let g:Tlist_Show_One_File = 1 let g:Tlist_GainFocus_On_ToggleOpen = 1 set wildmenu set wcm=<Tab> menu Encoding.koi8-r :set enc=koi8-r<CR> :e ++enc=koi8-r ++ff=unix<CR> menu Encoding.windows-1251 :set enc=cp1251<CR> :e ++enc=cp1251 ++ff=dos<CR> menu Encoding.cp866 :set enc=8bit-cp866<CR> :e ++enc=cp866 ++ff=dos<CR> menu Encoding.utf-8 :set enc=utf8<CR> :e ++enc=utf8 <CR> menu Encoding.koi8-u :set enc=koi8-u<CR> :e ++enc=koi8-u ++ff=unix<CR> map <F8> :emenu Encoding.<TAB> " For 'view' mode if &readonly == 1 set nonumber set nofoldenable set foldcolumn=10 nmap <F10> :qa<cr> nmap <Space> <PageDown> endif set shiftwidth=2 set nobackup set ignorecase smartcase set pastetoggle=<F5> set tags+=~/.vim/tags set vb t_vb=". set langmap=ц:,Кq,Гw,Хe,Лr,Еt,Оy,Зu,Ыi,Эo,Ъp,И[,Я],Жa,Щs,Чd,Бf,Рg,Тh,Пj,Мk,Дl,Ь',Сz,Юx,Уc,Нv,Йb,Фn,Шm,В\,,А.,Ј` set linebreak set langmenu=ru_ru set helplang=ru,en "set noswapfile "set background=dark "=========================================== :highlight Comment ctermfg=DarkGreen guifg=DarkGreen command Wsudo set buftype=nowrite | silent execute ':%w !sudo tee %' | set buftype= | e! % map <F2> :w<CR> imap <F2> <Esc>:w<CR>a map <F3> :nohlsearch<CR> map <F5> :make<CR> map <F6> :cope<CR> map <F7> :cp<CR> map <F8> :cn<CR> map <F11> :set wrap!<CR> map <F12> :set number!<CR> map kk :w! /tmp/vim<CR> map ll :r /tmp/vim<CR> map [ :previous<CR> map ] :next<CR> map a i map {<CR> {<CR>}<Esc>O "================================================== let g:omni_syntax_group_include_php = 'phpFunctions,phpMethods' function! s:mueller(word) if a:word != "" "let rs = system("grep -i -P ^" . a:word . " ~/dict/mueller-dict") let rs = system("grep -i -P ^" . a:word . "= /usr/local/share/enrus.dic") if rs == "" echo "not found" else echo rs endif else echo "not word" endif endfunction map ,t :call <SID>mueller(expand("<cword>"))<CR> " Intelligent Home moves to the first non-blank character on the line, then to " the very first character on the line nmap <Home> :call HomeButton()<CR> imap <Home> <C-O>:call HomeButton()<CR> " In Normal mode intelligent End moves after the last character on the line if " the line is not empty nmap <End> :call EndButton()<CR> function HomeButton() if col(".") != 1 let current_cursor_column = col(".") execute("normal ^") if col(".") == current_cursor_column execute("normal 0") endif endif endfunction function EndButton() execute("normal $") if col("$") != 1 execute("normal l") endif endfunction
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5289
ОС: Gentoo

Re: несколько вопросов

Сообщение /dev/random »

zls писал(а):
15.05.2008 16:24
1) Вот в доках сказано
<C-LEFTARROW><C-RIGHTARROW> : jump one word backwards/forwards
но при нажатии на Ctrl со стрелками курсор по словам не скачет а вставляются a,b,c,d и перенос строки; в .vimrc есть строка "set nocompatible" , что не так

Это проблема совместимости с конкретными терминалами. Это наблюдается, в частности, в urxvt, но отсутствует в xterm. Я не знаю, можно ли это исправить, но, думаю, если очень нужны ctrl-стрелки, и нельзя обойтись shift-стрелками, их можно переназначить.
Спасибо сказали:
zls
Сообщения: 26

Re: несколько вопросов

Сообщение zls »

/dev/random писал(а):
16.05.2008 15:56
Это проблема совместимости с конкретными терминалами. Это наблюдается, в частности, в urxvt, но отсутствует в xterm. Я не знаю, можно ли это исправить, но, думаю, если очень нужны ctrl-стрелки, и нельзя обойтись shift-стрелками, их можно переназначить.


ага, проверил на xterm, работает, а вот на mrxvt не хочет, что можно сделать? самая нужная и удобная комбинация )
Спасибо сказали:
Аватара пользователя
ZyX
Сообщения: 355
ОС: Gentoo

Re: несколько вопросов

Сообщение ZyX »

zls писал(а):
15.05.2008 16:24
2) Вот хотел перебиндить большинство клавиш, но столкнулся с "небольшой" проблемкой
делаю так:

map <C-v> a - после этого по Ctrl-v соответственно происходит переход в режим ввода

теперь чтобы повесить на "а" например прыжок по словам делаю так:

map a w - после этоно при нажатии на "а" курсор перескакивает не следующее слово, но и по Ctrl-v теперь происходит тоже самое

как тогда можно действительно перебиндить горячие клавиши?

может на все эти "dd yy pp a i ..." горячие клавиши есть полные комманды,
которые позволят полностью перемапить все "с нуля" ?
например чтоб перенести режим вставки с "а" на Ctrl-a вместо:
map <C-a> a
можно написать:
map <C-a> :startinsert<Enter>
:h :noremap
Во избежание конфликтов я бы рекомендовал всё, что можно писать в виде [nvxsoilc]?noremap. У тебя сейчас идёт так:
нажимаешь <C-v> - подставляется a вместо <C-v> - подставляется w вместо a
Если писать [nvxsoilc]?noremap, то Vim не станет проверять, нет ли постановок для {rhs}, а будет использовать стандартные команды. Извращаться с :\w+<C-m>, по-моему, не стоит пока есть более короткие аналоги.


Кстати, я один раз где-то увидел идею использовать запятую в качестве "dead key", а потом понял, что это удобно. Поэтому, если кому интересно:

Код:

"{{{3 ',' "{{{4 insert "Если после запятой идёт пробел, то это запятая. "Полезно при использовании :set keymap= inoremap ,<SPACE> ,<SPACE> "фигурные скобки: "окружить строку фигурными скобками inoremap ,ef <C-o>I{<C-m><C-o>o}<C-o>I "окружить часть строки после курсора фигурными скобками inoremap ,eF <C-m>{<C-m><C-o>o}<C-o>I "новая строка, окруженная фигурными скобками inoremap ,F {<C-o>o}<C-o>O "просто фигурные скобки inoremap ,f {}<C-\><C-o>h "квадратные скобки inoremap ,h []<C-\><C-o>h "круглые скобки inoremap ,s ()<C-\><C-o>h "угловые скобки inoremap ,u <LT>><C-\><C-o>h "окружить СЛОВО круглыми скобками inoremap ,es (<C-\><C-o>E<C-o>a)<C-\><C-o>h "автоотступ inoremap ,. <C-o>== "две запятые набрать быстрее, чем обратный слэш inoremap ,, \ "двинутся на слово вперёд inoremap ,w <C-o>w "на СЛОВО вперёд inoremap ,W <C-o>W "назад inoremap ,b <C-o>b inoremap ,B <C-o>B "в конец строки inoremap ,a <C-o>A "в начало inoremap ,i <C-o>I "новая строка, полезно тем, что текущая строка не разрывается, "как в случае с <C-m> inoremap ,l <C-o>o "Новая строка выше текущей inoremap ,o <C-o>O "вырезать/копировать/вставить в буфер @z inoremap ,dw <C-o>"zdaw inoremap ,p <C-o>"zp inoremap ,P <C-o>"zP inoremap ,yw <C-o>"zyaw inoremap ,y <C-o>"zy inoremap ,d <C-o>"zd "Удалить, не трогая буфера inoremap ,D <C-o>"_d "закомментировать строку imap ,c <C-o>,c<SPACE> "Поменять русскую/английскую раскладку, функцию "пишите сами inoremap ,r <C-\><C-o>:call<SPACE>SwitchKeymap(g:kmaps, '+')<C-m> "Дополнить именем файла inoremap ,/ <C-x><C-f> "сохранить inoremap ,@ <C-o>:w!<C-m> "{{{4 visual "Копировать/вырезать/вставить в буфер @z vnoremap ,y "zy vnoremap ,d "zd vnoremap ,p "zp "{{{4 command "Опять скобки, круглые cnoremap ,s ()<Left> "Для шаблонов cnoremap ,S \(\)<Left><Left> "угловые, для шаблонов, выделить слово cnoremap ,U \<LT>\><Left><Left> "просто угловые cnoremap ,u <LT>><Left> "фигурные, для шаблонов cnoremap ,f \{}<Left> "квадратные cnoremap ,h []<Left> "квадратные, для классов символов в шаблонах cnoremap ,H [[::]]<Left><Left><Left> "в начало строки cnoremap ,i <Home> "в конец cnoremap ,a <End> cnoremap ,, \ "вставить предыдущую команду cnoremap ,. <C-r>: "вставить из основного буфера cnoremap ,p <C-r>" "вставить из буфера X'ов cnoremap ,P <C-r>+ "вставить из буфера @z cnoremap ,z <C-r>z
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5289
ОС: Gentoo

Re: несколько вопросов

Сообщение /dev/random »

zls писал(а):
17.05.2008 13:00
ага, проверил на xterm, работает, а вот на mrxvt не хочет, что можно сделать? самая нужная и удобная комбинация )

Код: Выделить всё

if &term=="rxvt-unicode"
        set <C-Left>=^[d
        set <C-Right>=^[c
endif

^[ вводится как: Ctrl+V; Esc
Вместо rxvt-unicode нужно подставить имя используемого терминала; вместо ^[d и ^[c, возможно, потребуется подставить другие коды, в зависимости от терминала. Какие именно для mrxvt - не знаю.
Спасибо сказали:
Аватара пользователя
Luinnar
Сообщения: 246
ОС: Solaris, Debian, Ubuntu

Re: несколько вопросов

Сообщение Luinnar »

(zls) писал(а):но в файле ~/.vim/systags нет ни одной функции из инклудов например
GtkWidget* gtk_button_new (void); - для этой строки ничего нет в systags

У ctags есть опция для включения в список тэгов и обычных деклараций функций, вот только я не помню что это за опция, так что отправляю вас к man ctags
Спасибо сказали:
AoN
Сообщения: 14

Re: несколько вопросов

Сообщение AoN »

fractaler писал(а):
28.03.2008 01:09
Еще вопрос, сразу: как на какую-нибудь клавишу повесить вставку определенных символов до и после выделенного текста?
Например:
asdfasdfasdf
в
/* asdfasdfasdf */
или в
<p>asdfasdfasdf </p>
Очень хочется повесить на разные клавиши наиболее используемые теги. Убирать их при необходимости только вручную, правильно?

Вот пример:
vmap p <esc>`>a</p><esc>`<i<p><esc>
- при выделенном тексте в режиме "VISUAL", добавляет тег <p> в начало и </p> - в конец выделеного текста.
Спасибо сказали:
Ответить