Как отобразить клавишу CAPS LOCK в VIM?

Я использую GVIM в соответствии с Windows. И хочу отобразить CAPSLOCK на Ctrl +^

Какой-либо способ сделать это?

Btw, я вижу тонны образцов по сети, как подкачать CAPS и Esc с помощью взлома реестра, но ни один из них не использует команду карты VIM, вместо этого внешние инструменты и изменения реестра.

53
задан Evgenyt 1 February 2010 в 02:20
поделиться

4 ответа

Под Windows? Используйте AutoHotkey . Это не отображение VIM, но, поскольку другие заявили, что вы не можете сопоставить его. Я использую AHK, чтобы сопоставить мои CAPSLOCK для Ctrl.

16
ответ дан 7 November 2019 в 08:23
поделиться

Я думаю, что в настоящее время вся идея хранилищ данных NoSQL и концепция баз данных документов настолько нова и отличается от существующих идей, которые управляют реляционным местом хранения, что в настоящее время существует очень мало (если есть) лучших практик.

На данный момент мы знаем, что правила хранения ваших данных в, скажем, CouchDB (или любой другой базе данных документов) довольно отличаются от правил для реляционной базы данных. Например, это в значительной степени тот факт, что нормализация и стремление к 3NF - это не то, к чему следует стремиться. Одним из распространенных примеров может быть простой блог.

В реляционном магазине у вас будет таблица для «Публикаций», «Комментариев» и «Авторов». У каждого Автора будет много Сообщений, и у каждого Сообщения будет много Комментариев. Это модель, которая работает достаточно хорошо, и карты хорошо по любой реляционной БД. Однако сохранение одних и тех же данных в docDB, скорее всего, будет отличаться. Вероятно, у вас будет что-то вроде коллекции документов Post, каждый из которых будет иметь своего автора и коллекцию комментариев, встроенных прямо в. Конечно, это, наверное, не единственный способ, который можно было бы сделать, и это в какой-то мере компрометировать (сейчас быстро запрашивать один пост - ты делаешь только одну операцию и получаешь все обратно), но у тебя нет возможности сохранить отношения между авторами и постами (так как все это становится частью постового документа).

Я также видел примеры использования атрибута «type» (в примере CouchDB). Конечно, звучит как жизнеспособный подход. Это лучший? Понятия не имею. Конечно, в MongoDB вы бы использовать отдельные коллекции в базе данных, что делает атрибут типа полный бред. В CouchDB, хотя... возможно, что лучше . Другие альтернативы? Отдельные базы данных для каждого типа документа? Это кажется немного закольцованным, поэтому я бы сам склонялся к «типовому» решению. Но это только я. Возможно, есть что-то получше.

Я понимаю, что я немного вмешался здесь и сказал очень мало, скорее всего ничего, чего вы еще не знали. Моя точка в этом - я думаю, что мы должны экспериментировать с инструментами, которые у нас есть, и данными, с которыми мы работаем, и со временем хорошие идеи будут распространены и станут лучшими практиками. Я просто думаю, что ты слишком рано спрашиваешь в игре.

-121--1055312-

Это первое, что спросить себя, что вам покупает SSL? Это дает вам уверенность, что никто и ни одно приложение не смогут «нюхать» трафик и видеть, что происходит между веб-сервером и браузером. Стоимость - это реальная стоимость приобретения SSL-сертификата, а также текущая стоимость незначительного увеличения скорости загрузки. Вы упоминаете, что в более старых браузерах возникают проблемы с загрузкой файлов по SSL- коммуникации. Я не могу говорить с этим, и я не буду слишком беспокоиться об этом. С точки зрения безопасности, у вас есть еще одна проблема. Современные брандмауэры отслеживают трафик в поисках различных попыток взлома.Протокол SSL не позволяет брандмауэру отслеживать эту связь, поэтому разработчик/веб-администратор приложения должен быть еще более заинтересован в защите своих приложений и сайтов от различных попыток взлома. Короче говоря, следует шифровать только те коммуникации, которые действительно в этом нуждаются.

-121--1177238-

Linux? Используя X, используйте xmodmap для изменения отображения ключа, например

xmodmap -e 'clear Lock' -e 'keycode 0x42 = Escape'

Will map Esc to the CapsLock key. Google для получения дополнительных примеров.

56
ответ дан 7 November 2019 в 08:23
поделиться

Я не думаю, что вы можете. Я верю, что CAPS-LOCK, вероятно, переведен ОС, прежде чем Vim когда-либо видит его. Таким образом, вам нужно будет сделать взлом на уровне ОС, подобно взломам реестра, которые вы уже видели.

Редактировать: AutoHotkey выглядит так, будто он может быть использован для моста Bridge PIP VIM-OS . Таким образом, приложение третьего раза в третьем разах делает хаки на уровне ОС, и вы просто подключаете это приложение.

4
ответ дан 7 November 2019 в 08:23
поделиться

Это:

x foreach println(_ + 1)

эквивалентно:

x.foreach(println(x$1 => x$1 + 1))

Нет никаких указаний на тип x $1 , и, честно говоря, нет смысла печатать функцию.

Очевидно, вы (для меня) намереваетесь напечатать x $0 + 1 , где x $0 будет вместо этого параметр, переданный foreach . Но давайте рассмотрим это... foreach принимает в качестве параметра Function1 [T, Unit] , где T - параметр типа списка. Вместо этого в foreach передается println (_ + 1) , которое является выражением, возвращающим Unit .

Если бы вы написали, вместо x foreach println , вы бы передали совсем другое. Вы передаете функцию (*) println , которая принимает Any и возвращает Unit , что соответствует требованиям foreach .

Это немного запутывается из-за правил расширения _ . Он расширяется до самого внутреннего разделителя выражения (скобки или фигурные скобки), за исключением тех случаев, когда они вместо параметра, и в этом случае это означает другое: приложение частичной функции.

Чтобы объяснить это лучше, посмотрите на следующие примеры:

def f(a: Int, b: Int, c: Int) = a + b + c
val g: Int => Int = f(_, 2, 3) // Partial function application
g(1)

Здесь мы применяем второй и третий аргументы к f , и вернули функцию, требующую только оставшегося аргумента. Обратите внимание, что это сработало только потому, что я указал тип g , в противном случае мне пришлось бы указать тип аргумента, который я не применял. Продолжим:

val h: Int => Int = _ + 1 // Anonymous function, expands to (x$1: Int => x$1 + 1)
val i: Int => Int = (_ + 1) // Same thing, because the parenthesis are dropped here
val j: Int => Int = 1 + (_ + 1) // doesn't work, because it expands to 1 + (x$1 => x$1 + 1), so it misses the type of `x$1`
val k: Int => Int = 1 + ((_: Int) + 1) // doesn't work, because it expands to 1 + (x$1: Int => x$1 + 1), so you are adding a function to an `Int`, but this operation doesn't exist

Давайте подробнее обсудим k , потому что это очень важный пункт. Напомним, что g является функцией Int = > Int , верно? Итак, если бы я набрала 1 + g , это имело бы смысл? Вот что было сделано в k .

Что смущает людей, так это то, что они действительно хотели:

val j: Int => Int = x$1 => 1 + (x$1 + 1)

Другими словами, они хотят, чтобы x $1 заменив _ , чтобы перейти к вне скобки, и в надлежащее место. Проблема здесь в том, что, хотя это может показаться им очевидным, что является правильным местом, это не очевидно для компилятора. Рассмотрим этот пример, например:

def findKeywords(keywords: List[String], sentence: List[String]) = sentence.filter(keywords contains _.map(_.toLowerCase))

Теперь, если бы мы расширили это до точки за скобками, мы бы получили следующее:

def findKeywords(keywords: List[String], sentence: List[String]) = (x$1, x$2) => sentence.filter(keywords contains x$1.map(x$2.toLowerCase))

Что определенно не то, чего мы хотим. Фактически, если _ не был ограничен самым внутренним ограничителем выражения, никогда нельзя было использовать _ с вложенными map , flatMap , filter и foreach .

Теперь, возвращаясь к путанице между анонимной функцией и частичным применением, смотрите здесь:

List(1,2,3,4) foreach println(_) // doesn't work
List(1,2,3,4) foreach (println(_)) // works
List(1,2,3,4) foreach (println(_ + 1)) // doesn't work

Первая строка не работает из-за того, как работает нотация операции. Scala только что видит, что println возвращает Unit ,это не то, что ожидает foreach .

Вторая строка работает, потому что скобки позволяют Scala оценить println (_) в целом. Это приложение частичной функции, поэтому оно возвращает значение Any = > Unit , что является приемлемым.

Третья строка не работает, поскольку _ + 1 является анонимной функцией, которую вы передаете в качестве параметра println . Вы не делаете println частью анонимной функции, что вы хотели.

Наконец, чего мало кто ожидает:

List(1,2,3,4) foreach (Console println _ + 1)

Это работает. Почему он это делает, остается в качестве упражнения для читателя.: -)

(*) На самом деле, println - это метод. При записи x foreach println метод не передается, поскольку его невозможно передать. Вместо этого Скала создаёт замыкание и пропускает его. Она расширяется следующим образом:

x.foreach(new Function1[Any,Unit] { def apply(x$1: Any): Unit = Console.println(x$1) })
-121--1174548-

Ее можно преобразовать в байты с помощью метода encode :

>>> "insert into egg values ('egg');".encode('ascii')    # ascii is just an example
b"insert into egg values ('egg');"
-121--312666-

Capslock (и Control, и Shift и т. д.) является ключом-модификатором, что означает, что она используется с другой обычной клавишей для изменения значения этой клавиши. AFAIK ОС не передает модификаторные клавиши приложению, если не была также нажата обычная клавиша, например, нажатие CTRL не будет отображаться приложением, но CTRL-C будет.

11
ответ дан 7 November 2019 в 08:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: