Тонкая настройка vim (делимся полезностями в .vimrc. Вопросы задавайте в отдельных темах!)
Модератор: /dev/random
Re: Тонкая настройка vim
Так вот, допустим вы пишите программу на С:
#include <stdlib.h*>
* - позиция курсора
Теперь когда вы нажимаете enter, вставляется новый инклюд:
#include <stdlib.h>
#include <*>
Или допустим html:
<ul>
<li>Кто здесь?*</li>
</ul>
После нажатия enter будет:
<ul>
<li>Кто здесь?</li>
<li>*</li>
</ul>
Такой возможности я нигде не видел, и поэтому написал для этого плагин
http://www.vim.org/scripts/script.php?script_id=1956
(Только не говорите что у меня плохой английский, я и так это знаю )
Значит копируете его в ~/.vim/plugiln В .vimrc пишите что-то вроде этого:
let g:smart_cr = {}
let g:smart_cr.html = [['<li>', '^\s*</li>', "<li>@@@</li>"]]
let g:smart_cr.c = [['^#include <', '^>$', "#include \<@@@>"],
\['^#include "', '^"$', "#include \"@@@\""]]
g:smart_cr это хэш. Ключ в этом хэше - это тип файла, значение - это список правил (которые тоже список ). Первый элемент - регулярное выражение для куска строки перед курсором в момент нажатия на enter, второй - регвыр для куска после курсора, третий - новая строка которую надо вставить.
@@@ - место куда поставить курсор в новой строке. Маркер можно поменять так:
let g:smart_cr_marker = 'here'
По моему вышло очень удобно
#include <stdlib.h*>
* - позиция курсора
Теперь когда вы нажимаете enter, вставляется новый инклюд:
#include <stdlib.h>
#include <*>
Или допустим html:
<ul>
<li>Кто здесь?*</li>
</ul>
После нажатия enter будет:
<ul>
<li>Кто здесь?</li>
<li>*</li>
</ul>
Такой возможности я нигде не видел, и поэтому написал для этого плагин
http://www.vim.org/scripts/script.php?script_id=1956
(Только не говорите что у меня плохой английский, я и так это знаю )
Значит копируете его в ~/.vim/plugiln В .vimrc пишите что-то вроде этого:
let g:smart_cr = {}
let g:smart_cr.html = [['<li>', '^\s*</li>', "<li>@@@</li>"]]
let g:smart_cr.c = [['^#include <', '^>$', "#include \<@@@>"],
\['^#include "', '^"$', "#include \"@@@\""]]
g:smart_cr это хэш. Ключ в этом хэше - это тип файла, значение - это список правил (которые тоже список ). Первый элемент - регулярное выражение для куска строки перед курсором в момент нажатия на enter, второй - регвыр для куска после курсора, третий - новая строка которую надо вставить.
@@@ - место куда поставить курсор в новой строке. Маркер можно поменять так:
let g:smart_cr_marker = 'here'
По моему вышло очень удобно
Re: Тонкая настройка vim
Shift можно не зажимать
Хех, действительно В хелпе написано ctrl-^, а я и не проверил ctrl-6
Re: Тонкая настройка vim
Кстати это у всех при включении подсветки текущей строки (set cursorline) при перемотке некоторых файлов (например какой нить вимовский плагин) загрузка проца увеличивается чуть ли не до 100%? Как бороться?
Re: Тонкая настройка vim
Выложил еще один плагин http://www.vim.org/scripts/script.php?script_id=1957 для автодополнения кусков кода. Например если ввести "for" и нажать таб, получиться:
for(@@@; @@@; @@@) {
@@@
}
Выделяется первый маркер и курсор устанавливается на него. Следующее нажатие <tab> сдвинет курсор к следующему маркеру. Если нечего дополнять или если не осталось неиспользованых маркеров, то <tab> работает как обычно. Пример моего файла с snippet'ами во вложении.
У меня так же. А зачем оно в нормальном режиме? Лучше включать его в режиме вставки.
for(@@@; @@@; @@@) {
@@@
}
Выделяется первый маркер и курсор устанавливается на него. Следующее нажатие <tab> сдвинет курсор к следующему маркеру. Если нечего дополнять или если не осталось неиспользованых маркеров, то <tab> работает как обычно. Пример моего файла с snippet'ами во вложении.
У меня так же. А зачем оно в нормальном режиме? Лучше включать его в режиме вставки.
- Вложения
-
- snippets.tar.bz2
- (1.26 КБ) 46 скачиваний
Re: Тонкая настройка vim
Это не баг, это особенность работы с терминалом. Насколько я понимаю терминал имеет функцию прокрутки текста, которая работает быстро. В случае подсветки строки приходится посылать на терминал весь экран.
Re: Тонкая настройка vim
C недавних пор начал пользоваться плагином minibufexplorer.
Проблема в том, что когда я закрываю вим (q!) сначало закрывается окно minibufexplorer'a, а потом основное окно.
Можно ли сделать так, что бы закрывалось все сразу ?
PS:minibufexplorer у меня открыт постоянно.
PPS:И еще, можно ли по ctrl+tab переключаться между буферами? И например по ctrl+shift+tab между вкладками вима?
Проблема в том, что когда я закрываю вим (q!) сначало закрывается окно minibufexplorer'a, а потом основное окно.
Можно ли сделать так, что бы закрывалось все сразу ?
PS:minibufexplorer у меня открыт постоянно.
PPS:И еще, можно ли по ctrl+tab переключаться между буферами? И например по ctrl+shift+tab между вкладками вима?
Archlinux <strike>ion3</strike>xmonad urxvt ncmpcpp emacs screen <strike>gajim</strike>qutim rtorrent
- Portnov
- Модератор
- Сообщения: 1786
- Статус: Матёрый линуксоид
- ОС: Debian testing/unstable
- Контактная информация:
Re: Тонкая настройка vim
1. :qa!
2. :map <C-Tab> :bn<CR>
3. :map <C-S-Tab> :tabnext<CR>
Только вот комбинации с Ctrl работают не во всех терминалах.
2. :map <C-Tab> :bn<CR>
3. :map <C-S-Tab> :tabnext<CR>
Только вот комбинации с Ctrl работают не во всех терминалах.
Работа: Ubuntu 9.10
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
Re: Тонкая настройка vim
Спасибо помогло.
С ctrl у меня рабоатет а вот с табом не хочет
С ctrl у меня рабоатет а вот с табом не хочет
Archlinux <strike>ion3</strike>xmonad urxvt ncmpcpp emacs screen <strike>gajim</strike>qutim rtorrent
Re: Тонкая настройка vim
inline писал(а): ↑12.07.2007 15:51Поставил плагин tSkeleton, написал шаблоны. Только одно не нравится: есть, например, шаблон
Код: Выделить всё
/******************************************************************** * <+FILE NAME+> * ...
и каждый раз, с различной длиной имени файла, звездочка справа съезжает неизвестно куда - приходится вручную поправлять. Подскажите, как сделать длину <+FILE NAME+> фиксированной (т.е. при необходимости дополняющейся пробелами)?
Оказывается, надо было использовать printf().
Вот мои шаблоны для C++:
Код: Выделить всё
/********************************************************************************
* <+call:printf("%-77s", expand("%:t"))+>*
* Copyright (C) <+call:strftime("%Y")+> <+call:printf("%-58s", g:tskelUserName)+>*
* *
* This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation, either version 3 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
********************************************************************************/
#ifndef <+FILE NAME:u:s/\./_/+>
#define <+FILE NAME:u:s/\./_/+>
<+CURSOR+>
#endif // <+FILE NAME:u:s/\./_/+>
// vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab cindent
Код: Выделить всё
/********************************************************************************
* <+call:printf("%-77s", expand("%:t"))+>*
* Copyright (C) <+call:strftime("%Y")+> <+call:printf("%-58s", g:tskelUserName)+>*
* *
* This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation, either version 3 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
********************************************************************************/
<+call:eval('findfile(expand("%:r:t").".h", ".;") != "" ? "\n#include \"".findfile(expand("%:r:t").".h", ".;")."\"\n" : ""')+><+call:eval('findfile(expand("%:r:t").".h", ".;") != "" ? "<+CURSOR+>".GenImpl(findfile(expand("%:r:t").".h", ".;")) : "\n<+CURSOR+>\n"')+>
// vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab cindent
Также написал плагин, генерирующий реализации для прототипов функций - http://www.vim.org/scripts/script.php?script_id=1960 . Он используется в последнем шаблоне. Допустим, у нас есть файл test.h:
Код: Выделить всё
#ifndef TEST_H
#define TEST_H
class Test
{
public:
Test(int val = 0);
int getVal() const;
void setVal(int val);
private:
int m_val;
};
#endif
При создании файла test.cpp в той же директории в него автоматически вставляются строки:
Код: Выделить всё
#include "test.h"
Test::Test(int val)
{
}
int Test::getVal() const
{
}
void Test::setVal(int val)
{
}
По-моему, удобно.
-
- Сообщения: 18
- ОС: Fedora 10, Ubuntu
Re: Тонкая настройка vim
Товарищи, здравствуйте! Не нашел в предыдущем материале одну функцию, которую считаю полезной и мощной. Как вызвать оболочку из vim, да не просто какой-то там ! с выведением странички, а полноценную такую оболочку в новом буфере (). Тогда Можно было бы:
* Подрубить к виму какой-нибудь браузер (ну, консольный) и читать QtAssistant (Ну или там html-версии msdn'a)
* не выходя из вима и не теряя из видимости свои буфера (гы-гы), ходить по системе Midnight commanderom
* и много чего еще
* Подрубить к виму какой-нибудь браузер (ну, консольный) и читать QtAssistant (Ну или там html-версии msdn'a)
* не выходя из вима и не теряя из видимости свои буфера (гы-гы), ходить по системе Midnight commanderom
* и много чего еще
Re: Тонкая настройка vim
Создал вот этот блог
Всё о Vim
Собственно, постарюсь писать туда, всё что будет находиться интересного
Всё о Vim
Собственно, постарюсь писать туда, всё что будет находиться интересного
Re: Тонкая настройка vim
ganqqwerty писал(а): ↑18.07.2007 06:24Товарищи, здравствуйте! Не нашел в предыдущем материале одну функцию, которую считаю полезной и мощной. Как вызвать оболочку из vim, да не просто какой-то там ! с выведением странички, а полноценную такую оболочку в новом буфере (). Тогда Можно было бы:
* Подрубить к виму какой-нибудь браузер (ну, консольный) и читать QtAssistant (Ну или там html-версии msdn'a)
* не выходя из вима и не теряя из видимости свои буфера (гы-гы), ходить по системе Midnight commanderom
* и много чего еще
Надо патчить vim. http://www.wana.at/vimshell/
Re: Тонкая настройка vim
Вот еще один хороший плагин: http://www.vim.org/scripts/script.php?script_id=1676
Он может изменить слово под курсором по типу on -> off, true -> false
О чем-то таком тут уже писали, но это другой плагин с большими возможностями. Например он может менять monday -> tuesday -> wednesday, и т.д. по кругу. Или например if -> elseif -> else -> endif -> if -> ... Еще он может иметь для каждого типа файла свой словарь.
Кроме того, его еще можно расширять. Добавте в ~/.vimrc:
let g:toggle_words_dict = {'*': [['y', 'n'], ['enable', 'disable'], ['while', 'until'], ['if', 'unless']]}
'*' - это для всех типов файлов
Назначить сочетание для плагина так:
nmap <Leader>t :ToggleWord<CR>
Он может изменить слово под курсором по типу on -> off, true -> false
О чем-то таком тут уже писали, но это другой плагин с большими возможностями. Например он может менять monday -> tuesday -> wednesday, и т.д. по кругу. Или например if -> elseif -> else -> endif -> if -> ... Еще он может иметь для каждого типа файла свой словарь.
Кроме того, его еще можно расширять. Добавте в ~/.vimrc:
let g:toggle_words_dict = {'*': [['y', 'n'], ['enable', 'disable'], ['while', 'until'], ['if', 'unless']]}
'*' - это для всех типов файлов
Назначить сочетание для плагина так:
nmap <Leader>t :ToggleWord<CR>
Re: Тонкая настройка vim
Еще один плагин: http://www.vim.org/scripts/script.php?script_id=1697
Плагин предназначен для работы с окружающими скобками, кавычками, тэгами и т.д. Например:
Нажмите cs"' (c,s,",') внутри строки:
"Hello world!"
что бы изменить её на
'Hello world!'
Теперь cs'<q>
<q>Hello world!</q>
Теперь назад cst"
"Hello world!"
Удалить кавычки: ds"
Hello world!
Теперь переместите курсор на слово Hello и нажмите ysiw]
[Hello] world!
Как это работает:
ds - удалить скобки; пример:
ds" - удалить кавычки
ds) - удалить круглые скобки
dst - удалить тэги
cs - заменить
cs)] - заменить круглые скобки на квадратные
ys - вставить скобки
ysiw) - вставить скобки вокруг слова, iw - стандартная команда vim (:help text-objects)
yss} - вставить фигурные скобки вокруг строки; yss - частный случай ys для работы над текущей строкой
Плагин предназначен для работы с окружающими скобками, кавычками, тэгами и т.д. Например:
Нажмите cs"' (c,s,",') внутри строки:
"Hello world!"
что бы изменить её на
'Hello world!'
Теперь cs'<q>
<q>Hello world!</q>
Теперь назад cst"
"Hello world!"
Удалить кавычки: ds"
Hello world!
Теперь переместите курсор на слово Hello и нажмите ysiw]
[Hello] world!
Как это работает:
ds - удалить скобки; пример:
ds" - удалить кавычки
ds) - удалить круглые скобки
dst - удалить тэги
cs - заменить
cs)] - заменить круглые скобки на квадратные
ys - вставить скобки
ysiw) - вставить скобки вокруг слова, iw - стандартная команда vim (:help text-objects)
yss} - вставить фигурные скобки вокруг строки; yss - частный случай ys для работы над текущей строкой
- Dark_Savant
- Бывший модератор
- Сообщения: 1100
- Статус: киборг
- ОС: Cyborg OS 0.0.1.3
Re: Тонкая настройка vim
по-моему, совершенно бесполезный плагин. s/"/'/g итп нэ ?
I'm a tragic hero
In this game called life
My chances go to zero
But I always will survive
In this game called life
My chances go to zero
But I always will survive
Re: Тонкая настройка vim
Ну во первых :s/"/'/g набирать дольше чем cs"', во вторых :s изменит всю строку, например:
"string1", "multi-line
string"
Изменится на
'string1', 'multi-line
string"
В третих что бы добавить скобки вокруг строки надо написать что-то вроде этого
:s/\(.*\)/{\1}/
Я неговорю уже о том чтобы добавить скобки вокруг предложения или слова
А для тэгов это вообще убиться можно
-
- Сообщения: 18
- ОС: Fedora 10, Ubuntu
Re: Тонкая настройка vim
Могу отправить на блог большой ман из детерменированных пунктов. Типа "что я жду от хорошей IDE". Материал большой, поэтому тут выкладывать не хочется. Как отправлять?
Re: Тонкая настройка vim
Кто нить пробовал подружить vim и haskell? В частности интересует hasktags и taglist, ну и другие советы
Re: Тонкая настройка vim
ganqqwerty,
naplanetu@gmail.com
naplanetu@gmail.com
Re: Тонкая настройка vim
Dark_Savant писал(а): ↑17.07.2006 12:18запустить этот самый kde terminal, в нем vim ~/.vimrc
набираем map ^Vтребуемая_комбинация требуемое_действие, аналогично для imap, vmap.
ежели ты пр konsole, то нада в менюхе выбрать настройка->клавиатура->xterm(xfree 4.x.x)
Re: Тонкая настройка vim
Phobos,
Ну вот по крайней мере что нашёл гугль,
Vim as a Haskell IDE, first steps
http://www.cs.kent.ac.uk/people/staff/cr3/...ll/Vim/vim.html
Ну вот по крайней мере что нашёл гугль,
Vim as a Haskell IDE, first steps
http://www.cs.kent.ac.uk/people/staff/cr3/...ll/Vim/vim.html
Re: Тонкая настройка vim
pento писал(а): ↑20.07.2007 19:15Phobos,
Ну вот по крайней мере что нашёл гугль,
Vim as a Haskell IDE, first steps
http://www.cs.kent.ac.uk/people/staff/cr3/...ll/Vim/vim.html
эт я тоже находил, мне собственно более интересно как научить taglist работать с hasktags...
ps на за ссылку все равно спасибо
Re: Тонкая настройка vim
Люди, простите за глупый вопрос: "А что такое vim?" и где его запустить? ... недавно я тута
Mandriva 2007
Mandriva 2007
- Dark_Savant
- Бывший модератор
- Сообщения: 1100
- Статус: киборг
- ОС: Cyborg OS 0.0.1.3
Re: Тонкая настройка vim
а тему почитать, а в гугеле набрать ?
I'm a tragic hero
In this game called life
My chances go to zero
But I always will survive
In this game called life
My chances go to zero
But I always will survive
-
- Сообщения: 18
- ОС: Fedora 10, Ubuntu
Re: Тонкая настройка vim
Серия вопросов:
1. Подсветка ошибок при компиляции - как в колор-gcc
3. Возможно ли сделать настоящую карту классов и их членов (как например в Вижуале) - с помощью taglist?
Вопрос отпал после прочтения ctags --help - раньше не мог додуматься, что члены-данные класса логично назвать буквой m
4. Кто пробовал прикручивать к vim переводчик (словарик я имею ввиду)? Например, по рецепту из Википедии. У меня их совет не сработал. Еще круче, если можно будет открывать перевод в новом сплите (буфере) для слова под курсором.
5. Переход к файлу под курсором когда этот самый файл - хреньк в кавычках, объявленная в моем Makefile. Шараханье по функциям и членам данных объявленных в таком файле, не прибегая к явному открытию файла. Омни и ctrl+n дополнения по данным из таких файлов
6. Плагин minibufferExplorer - как сделать, чтобы закрытые буферы там не высвечивались? Или хотя бы передвигались в конец списка? Или может есть лучшие плагины для буферов?
7. Тo Inline: а как сделать чтобы болванки для реализации добавлялись на ходу? По комбинации клавиш, например. А если h и cpp файлы обычно лежат разных директориях ./src и ./inc ?
8. Vim и mc - если открывать с помощью vimа файлы, при этом находясь в mc, то возникают проблемы с Ctrl+O
Спасибо большое заранее!.
9. Патч vimshell - кто-нибудь нашел ему достойное применение?
1. Подсветка ошибок при компиляции - как в колор-gcc
3. Возможно ли сделать настоящую карту классов и их членов (как например в Вижуале) - с помощью taglist?
Вопрос отпал после прочтения ctags --help - раньше не мог додуматься, что члены-данные класса логично назвать буквой m
4. Кто пробовал прикручивать к vim переводчик (словарик я имею ввиду)? Например, по рецепту из Википедии. У меня их совет не сработал. Еще круче, если можно будет открывать перевод в новом сплите (буфере) для слова под курсором.
5. Переход к файлу под курсором когда этот самый файл - хреньк в кавычках, объявленная в моем Makefile. Шараханье по функциям и членам данных объявленных в таком файле, не прибегая к явному открытию файла. Омни и ctrl+n дополнения по данным из таких файлов
6. Плагин minibufferExplorer - как сделать, чтобы закрытые буферы там не высвечивались? Или хотя бы передвигались в конец списка? Или может есть лучшие плагины для буферов?
7. Тo Inline: а как сделать чтобы болванки для реализации добавлялись на ходу? По комбинации клавиш, например. А если h и cpp файлы обычно лежат разных директориях ./src и ./inc ?
8. Vim и mc - если открывать с помощью vimа файлы, при этом находясь в mc, то возникают проблемы с Ctrl+O
Спасибо большое заранее!.
9. Патч vimshell - кто-нибудь нашел ему достойное применение?