Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   VIM редактор (трюки) (https://javascript.ru/forum/offtopic/39725-vim-redaktor-tryuki.html)

Murdoc 09.07.2013 15:34

VIM редактор (трюки)
 
Подскажите как:

1 Есть код:
var handler = function(req, res) {
  fs.readFile('./views/index.html', function (err, data) {
    console.log(data);
    if (err) throw err;
    res.writeHead(200);
    res.end(data);
  }); 
}



Необходимо закомментировать строчным комментарием ("//") вначале каждой строки. Должно быть так:

//var handler = function(req, res) {
//  fs.readFile('./views/index.html', function (err, data) {
//    console.log(data);
//    if (err) throw err;
//    res.writeHead(200);
//    res.end(data);
//  }); 
//}




В теории, я бы сделал так (курсор на первом символе первой строки):
CTRL + v
7j
Shift + i
//
Esc


Но это не работает(

Murdoc 09.07.2013 15:57

работает.. vim подтормаживает (

monolithed 09.07.2013 17:12

# 1. выделить блок
shift+v+enter

# 2. Закомментировать
:s/^/\/\/

# 3. Разкомментировать
:s/^/\/\//


Добавь в map, делов то

Murdoc 09.07.2013 20:00

мой вариант универсальней)

кстати, толи мой .vimrc где-то косячит то ли какой-то плагин создает конфликт, но это:

# 2. Закомментировать
:s/^/\/\/


не работает (
комментирует только первую строку.. хотя вроде выражение верно



А это:

# 3. Разкомментировать
:s/^/\/\//


разве не так надо:

:s/^\/\//

Murdoc 09.07.2013 20:11

Сейчас посмотрел, у меня в конфиге уже добавлены были когда-то:
" F2: Comment selected Block with #'s
map <F2> :s/^\(.*\)$/\/\/\1/g<CR>
 
" F3: Uncomment selected Block thats commented with #'s
map <F3> :s/^\/\///g<CR>


но желания их использовать никогда не возникало

Murdoc 09.07.2013 20:15

А как скопировать в буфер код из VIM, особенно если в окне несколько окон?
Или вставить в VIM из буфера код, чтоб он не потерял свое структуры?

Было бы удобно - выделил мышкой и CTRL - c.
Может есть какие рецепты?

Из личного опыта:
Скопировать из VIM можно выполнив :set nonumber (уберет номера строк)
но каждый раз так делать неохота и это не работает с многооконностью

monolithed 10.07.2013 00:11

Цитата:

Сообщение от Murdoc
разве не так надо:
:s/^\/\//

Ага, опечатался

Цитата:

Сообщение от Murdoc
А как скопировать в буфер код из VIM, особенно если в окне несколько окон?

v + стрелочка (или shift + v) - выделить, yy - скопировать (в mac os у меня работает cmd + c)

Ну и чтобы копировать без форматирования:

set clipboard=unnamed
set paste!

Цитата:

Сообщение от Murdoc
Было бы удобно - выделил мышкой и CTRL - c.

А вообще :nopaste убивает режим форматирования, только если захочешь его добавить в конфиг типа:
imap <D-v> ^O:set paste<Enter>^R+^O:set nopaste<Enter>

То нужно будет отключить:
set smartindent


PS: мой конфиг

iKillMaxmaxmaximus 10.07.2013 00:13

Цитата:

Сообщение от Murdoc
VIM

а зачем нужен вим если у него оформление говно и есть нотпад?

monolithed 10.07.2013 00:22

Цитата:

Сообщение от iKillMaxmaxmaximus
а зачем нужен вим если у него оформление говно и есть нотпад?

Среди консольных редакторов ему равных нет

iKillMaxmaxmaximus 10.07.2013 00:30

Цитата:

Сообщение от monolithed
Среди консольных редакторов ему равных нет

а зачем нужны консольные редакторы если есть не консольные редакторы?

l-liava-l 10.07.2013 00:45

Цитата:

а зачем нужны консольные редакторы если есть не консольные редакторы?
кстати да, нафига? в графическом режиме можно и gedit заюзать чтобы быстро)

monolithed 10.07.2013 00:55

Цитата:

Сообщение от iKillMaxmaxmaximus
а зачем нужны консольные редакторы если есть не консольные редакторы?

Цитата:

Сообщение от l-liava-l
кстати да, нафига? в графическом режиме можно и gedit заюзать чтобы быстро)

Чтобы не открывать тектовый редактор или еще хуже IDE.

К примеру чтобы окрыть файл в vim на определенной строке достаточно написать в терминале:
vim +100 filename


Без терминала нужно открывать редактор, и долго кликать мышкой по папкам (или наоборот), а потом еще и скролить до нужной строки.

PS: Еще довольно часто бывает что некоторые IDE кешируют файлы (в частности этим грешит JetBrains).
Представьте что ежедневно вы переключаетесь между между 10-15 ветками гита, и открыв очередной раз файл чтобы внести изменения вам отдается предыдующая версия файла.
Не посмотрев дифф, можно закомитить совсем не то что хотели (у меня был один такой случай).

В консольном редакторе подобные ситуации сводятся к минимуму.

Еще IDE могут изменить кодировку файлов....


Иными словами, консольный редактор нужен для тех кто ценит свое время и время других

iKillMaxmaxmaximus 10.07.2013 01:04

или написать gedit +100 filename не?

я логики не уловил, вим хорош тем что у него есть один параметр с открытием на какой-то определенной строке? или что? тогда при чем тут его консольность?

iKillMaxmaxmaximus 10.07.2013 01:16

Цитата:

Сообщение от monolithed
Иными словами, консольный редактор нужен для тех кто ценит свое время и время других

я ценю свое время и время других и мне не нужен консольный редактор, мой нотпад и шторм не кэшиирует файлы и не меняет кодировки, чяднт?

monolithed 10.07.2013 01:19

Цитата:

Сообщение от iKillMaxmaxmaximus
или написать gedit +100 filename не?

Ничего не могу сказать, я не имею опыта знакомства с этим редактором

Цитата:

Сообщение от iKillMaxmaxmaximus
я логики не уловил, вим хорош тем что у него есть один параметр с открытием на какой-то определенной строке?

Это одна из миллиона возможностей vim.
Еще очень полезные вещи:
- открытие нескольких файлов в одном окне.
- выполнение кнсольных команд не выходя из редактора.
- мощная работа поиска и замены символов (аля sed)
- макросы

monolithed 10.07.2013 01:20

Цитата:

Сообщение от iKillMaxmaxmaximus
шторм не кэшиирует файлы и не меняет кодировки

Я как минимум знаю десяток людей которые с этим переодически сталкиваются

Цитата:

Сообщение от iKillMaxmaxmaximus
чяднт?

Я тебе привел пример с ветками проекта, читай внимательно

Цитата:

Сообщение от iKillMaxmaxmaximus
я ценю свое время и время других и мне не нужен консольный редактор

Видимо ты никогда не работал в системе без GUI

l-liava-l 10.07.2013 01:33

Установил, пробую юзать, странно очень))
но если гуй слетит, будет самое то

iKillMaxmaxmaximus 10.07.2013 02:49

Цитата:

Сообщение от monolithed
Я как минимум знаю десяток людей которые с этим переодически сталкиваются

видимо у них не 6.3


Цитата:

Сообщение от l-liava-l
Установил, пробую юзать, странно очень))

Конечно странно этому говнищу лет 300, давно уже нотпад ++ есть

monolithed 10.07.2013 03:07

Цитата:

Сообщение от iKillMaxmaxmaximus
видимо у них не 6.3

У тебя есть проекты в которых более 1000 js файлов и ты в течение целого дня создаешь и переключешся между ветками VCS?

iKillMaxmaxmaximus 10.07.2013 03:18

monolithed, не, нету, видимо в этом дело?

kobezzza 10.07.2013 10:12

Цитата:

Сообщение от monolithed (Сообщение 261432)
Среди консольных редакторов ему равных нет

А как же великий и ужасный Emacs:) Даже поговорка есть, что существует всего лишь 2 истинных редактора)

Gozar 10.07.2013 11:35

With kinesis advantage to future.

Забил на vim, его глюки и плюсы, которые не перевешивают его минусы. В шторме нельзя настроить по человечески переключалку - прощай русский. А привыкать к нескольким редакторам лень.

Решил проблему на аппаратном уровне, чего и остальным желаю.

Murdoc 10.07.2013 12:06

Цитата:

Сообщение от monolithed
v + стрелочка (или shift + v) - выделить, yy - скопировать (в mac os у меня работает cmd + c)

Ну и чтобы копировать без форматирования:

set clipboard=unnamed
set paste!

немного не то. Это копирует в буфер vim, а мне бы в системный. Чтобы возможно было скопировать и вставить куда угодно.


Цитата:

Сообщение от monolithed
Сообщение от Murdoc
Было бы удобно - выделил мышкой и CTRL - c.
А вообще :nopaste убивает режим форматирования, только если захочешь его добавить в конфиг типа:
imap <D-v> ^O:set paste<Enter>^R+^O:set nopaste<Enter>

То нужно будет отключить:
set smartindent

В моем vim умными отступами проблема не ограничивается. У меня также умные скобочки, кавычички и прочие дублированные символы )

Нужен какой-нибудь плагин, который бы срабатывал при вставке кода в vim и редактировал код налету (как в webstorm при вставке кода)

Murdoc 10.07.2013 12:20

Цитата:

Сообщение от iKillMaxmaxmaximus
а зачем нужны консольные редакторы если есть не консольные редакторы?

Хорошо бы уметь пользоваться и тем и тем.

monolithed 10.07.2013 14:00

Цитата:

Сообщение от Murdoc
немного не то. Это копирует в буфер vim, а мне бы в системный. Чтобы возможно было скопировать и вставить куда угодно.

У меня так и есть

Murdoc 11.07.2013 06:51

Цитата:

Сообщение от monolithed
У меня так и есть

вроде тоже получилось.
Кстати, можно вместо paste и nopaste использовать pastetoggle. Работает как переключатель:

# Переключалка на F4
set pastetoggle=<F4>

monolithed 11.07.2013 13:25

Цитата:

Сообщение от Murdoc
Кстати, можно вместо paste и nopaste использовать pastetoggle.

Я знаю, однако кастомные хоткеи стараюсь не делать, особенно для F-клавиш, т.к. у меня это будет Fn+F0..9

Tim 11.07.2013 18:28

Цитата:

В шторме нельзя настроить по человечески переключалку - прощай русский.
???

Gozar 11.07.2013 23:32

Цитата:

Сообщение от Tim
???

ideavim не понимай рюски!

Murdoc 14.07.2013 05:18

Сегодня обнаружил одну полезную функцию у vim. Как оказалось в vim можно сгенерировать html страничку, набрав команду в ex:
:TOhtml

также можно указать конкретное количество строк. Ниже html разметка из моего .vimrc после команды
:0, 30TOhtml

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>~/.vimrc.html</title>
<meta name="Generator" content="Vim/7.3">
<meta name="plugin-version" content="vim7.3_v6">
<meta name="syntax" content="vim">
<meta name="settings" content="use_css,number_lines">
<style type="text/css">
<!--
pre { font-family: monospace; color: #ffffff; background-color: #000000; }
body { font-family: monospace; color: #ffffff; background-color: #000000; }
.lnr { color: #804000; }
.PreProc { color: #c000c0; }
.Statement { color: #804000; }
.Comment { color: #008080; }
-->
</style>
</head>
<body>
<pre>
<span class="lnr"> 1 </span><span class="Comment">&quot; ----------------------------------------</span>
<span class="lnr"> 2 </span><span class="Comment">&quot; Общие настройки VIM</span>
<span class="lnr"> 3 </span><span class="Comment">&quot; ----------------------------------------</span>
<span class="lnr"> 4 </span>
<span class="lnr"> 5 </span><span class="Comment">&quot; Вкладки с файлами и статусная строка</span>
<span class="lnr"> 6 </span><span class="Comment">&quot; 0: Никогда не показывать</span>
<span class="lnr"> 7 </span><span class="Comment">&quot; 1: Показывать если больше чем 1</span>
<span class="lnr"> 8 </span><span class="Comment">&quot; 2: Всегда показывать</span>
<span class="lnr"> 9 </span><span class="Statement">set</span> <span class="PreProc">showtabline</span>=1
<span class="lnr">10 </span><span class="Statement">set</span> <span class="PreProc">laststatus</span>=2
<span class="lnr">11 </span>
<span class="lnr">12 </span><span class="Comment">&quot; Команданая строка</span>
<span class="lnr">13 </span><span class="Comment">&quot; Размер высоты</span>
<span class="lnr">14 </span><span class="Statement">set</span> <span class="PreProc">cmdheight</span>=1
<span class="lnr">15 </span>
<span class="lnr">16 </span><span class="Comment">&quot; Номерация строк</span>
<span class="lnr">17 </span><span class="Statement">set</span> <span class="PreProc">number</span>
<span class="lnr">18 </span>
<span class="lnr">19 </span><span class="Comment">&quot; Количество символов в номерации строк</span>
<span class="lnr">20 </span><span class="Statement">set</span> <span class="PreProc">numberwidth</span>=4
<span class="lnr">21 </span>
<span class="lnr">22 </span><span class="Comment">&quot; Отображение имени буфера в заголовке терминала</span>
<span class="lnr">23 </span><span class="Statement">set</span> <span class="PreProc">title</span>
<span class="lnr">24 </span>
<span class="lnr">25 </span><span class="Comment">&quot; Запрет переноса строк</span>
<span class="lnr">26 </span><span class="Statement">set</span> <span class="PreProc">nowrap</span>
<span class="lnr">27 </span>
<span class="lnr">28 </span><span class="Comment">&quot; Отступы сверху и снизу при скролле</span>
<span class="lnr">29 </span><span class="Statement">set</span> <span class="PreProc">scrolloff</span>=10
<span class="lnr">30 </span>
</pre>
</body>
</html>

Murdoc 14.07.2013 05:37

Цитата:

Сообщение от monolithed
Я знаю, однако кастомные хоткеи стараюсь не делать, особенно для F-клавиш, т.к. у меня это будет Fn+F0..9


а чем плохи F-клавиши? Просто их действительно мало кто использует, но они вроде как и созданы для пользовательских функций (тем более на маке)
Я на макбуке переназначил F-клавиши (теперь у меня пользовательские функции без Fn), удалил все стандартные опции с F10-12 и вроде как удобно.

Кстати сказать Mission Control гораздо удобней использовать на CTRL + "стрелочка вверх", а активную прогу на CTRL + "стрелочка вниз". Взаимодействовать с рабочими столами удобнее: влево, вправо, вверх и вниз )

Gozar 14.07.2013 12:36

F1 volume -
F2 volume +
F3 mute
F4 edit file
F5 copy file/reload page
F6 move file
F7 create dir
F8 home dir (del убрал за ненужностью, delete - del file)
F9 rename file/dir

10, 11, 12 Macros-ы, Remap и т.д.

Murdoc 14.07.2013 22:42

Цитата:

Сообщение от Gozar (Сообщение 262202)
F1 volume -
F2 volume +
F3 mute
F4 edit file
F5 copy file/reload page
F6 move file
F7 create dir
F8 home dir (del убрал за ненужностью, delete - del file)
F9 rename file/dir

10, 11, 12 Macros-ы, Remap и т.д.

Что-то все перемешалось.
У меня функциональные клавиши разделены на две группы: первая - системные опции (яркость монитора, громкость звука, переключение медиа треков и т.п), они доступны из любой программы и вторая индивидуальные опции конкретной программы (например переводчик гугл на F2 в firefox)

Если раньше чтобы обновить страничку в браузере нажимал F5, то сейчас cmd + R . Chrome в mac os, кстати вообще не работает с функциональными клавишами почему-то

Gozar 15.07.2013 09:25

Цитата:

Сообщение от Murdoc
Что-то все перемешалось.

F4-F9 это в основном krusader. :) Наиболее часто используемые.

Есть еще разные клавиши, а ля ⌘ - принудительное закрытие окна(без диалогов о не сохраненных файлах), левый alt переключение между окнами и правый ctrl переключение языка ... Яркость монитора я не регулирую, треки не переключаю кнопками. Другие сокращения доступны внутри программ, писать их нет смысла.

Клава у меня нестандартная, так что некоторые биндинги подойдут не всем ;)

monolithed 15.07.2013 11:56

Цитата:

Сообщение от Murdoc
Chrome в mac os, кстати вообще не работает с функциональными клавишами почему-то

Нужно Fn зажимать. А вообще я частично согласен, хоткеи отладчика даже с Fn не работают

Murdoc 20.07.2013 04:17

Редактировал файл и обнаружил вот такую штуку:


подсветка синтаксиса сбилась из-за "<".
Вероятно vim ждет закрывающей скобки. Ошибка возникает когда просматриваешь файл снизу вверх.

Должно быть так:


В конфиге поправил:
set showmatch 
imap [ []<left>
imap ( ()<left> 
"imap < <><left>
imap { {}<left>


не помогло(

Как это можно исправить?

monolithed 20.07.2013 13:31

Цитата:

Сообщение от Murdoc
В конфиге поправил

Это биндинг автокомплита

Цитата:

Сообщение от Murdoc
Как это можно исправить?

У меня такой проблемы нет, подсветка используется стандартная:

" Syntax highlight
syntax enable
filetype plugin indent on
colorscheme slate
set t_Co=256
set matchpairs+=<:>



Если нужно что-то больше, то:
https://github.com/pangloss/vim-javascript
https://github.com/int3/vim-taglist-plus
https://github.com/Chiel92/vim-autoformat
https://github.com/hallettj/jslint.vim
http://www.vim.org/scripts/script.php?script_id=1491

Murdoc 21.07.2013 07:07

Цитата:

Сообщение от monolithed
У меня такой проблемы нет, подсветка используется стандартная:


Судя по всему vim не выдержал большого объема кода в html файле. Или конфликт в плагине (тот что первый в твоей ссылке), он там еще за js в html-файлах отвечает, а у меня для этих целей установлен https://github.com/othree/html5.vim .. возможно конфликты



https://github.com/int3/vim-taglist-plus

нужная штука! Получилось поставить?
У меня ошибки вылезают при вызове :TlistToggle

сам плагин и jsctags установил поставил успешно. Вероятно нужна инициализация проекта или что-то вроде этого

monolithed 21.07.2013 14:07

Цитата:

Сообщение от Murdoc
нужная штука! Получилось поставить?

Ну я дал ссылки из закладок на то что ставил, когда это было я уже не помню )


Часовой пояс GMT +3, время: 16:51.