Самый простой способ удалить «составное» слово?

20

Извинения, если "составной" не является техническим термином. Я имею в виду следующее:

Hi, I-am-a-composite-word and we are not

Я хотел бы удалить только составное слово. В командном режиме, если я наведу курсор на I, то повторю dwнесколько раз, или лучше наберу dwодин раз, а затем несколько .нажатий, все получится. Однако по разным причинам я часто делаю это в течение дня, поэтому мне было интересно, есть ли более простой способ.

PS Я бы НЕ посчитал команду d9wболее простым способом. Подсчет длинной последовательности слов и тире не является моей идеей «проще».

DeltaIV
источник

Ответы:

33

То, что вы называете составным словом, на самом деле является СЛОВОМ (в противоположность слову). Чтение :h wordи :h WORDдолжно быть полезным:

                            *word*
A word consists of a sequence of letters, digits and underscores, or a
sequence of other non-blank characters, separated with white space (spaces,
tabs, <EOL>).  This can be changed with the 'iskeyword' option.  An empty line
is also considered to be a word.
                            *WORD*
A WORD consists of a sequence of non-blank characters, separated with white
space.  An empty line is also considered to be a WORD.

То, что вы ищете здесь, это dWкогда вы находитесь на Iили diWкогда вы находитесь в любом месте слова.

Возможно, в будущем вам также нужно будет прочитать :h 'iskeyword'.

statox
источник
1
спасибо за ответ: работает. По поводу определения: A WORD consists of a sequence of non-blank characters, separated with white space. Separated with white spaceозначает, что СЛОВО отделено другими словами или СЛОВАМИ с пробелами, верно?
DeltaIV
2
@DeltaIV Да in-this-sentence there are four"WORDsна 4 слова in-this-sentence, there, areи four"WORDs. Это легко увидеть, когда вы используете wи Wили bи, Bнапример, движения. Обратите внимание, что пробел может быть "обычным" пробелом или символом табуляции.
statox
1
Этот ответ был бы более полезным, если бы он начинался с «То, что вы ищете здесь, это dW ...», а не заставлял читателя переходить к среднему абзацу, чтобы найти решение.
Марк Мейер
9

Другим более общим решением является удаление до символа пробела с помощью dt (с пробелом после t), что означает «удалить в [символ]». Это часто полезно для таких вещей, как dt:и аналогичные.

алло
источник
что делает dt: ?
DeltaIV
1
Когда я написал тот же ответ, я узнал, что вы можете использовать <code>dt </code>пробел в конце.
BurnsBA
2
@DeltaIV На самом деле то, что вам действительно нужно, это читать :h motion.txtи использовать vimtutor, это очень поможет вам освоить основы Vim
statox
@statox Я был опытным специалистом в VIM ... 10 лет назад :-) vimtutorзвучит очень интересно. Я не уверен, что он установлен на удаленном сервере (похоже, что даже manутилита не установлена). Однако я проверю: если он автоматически устанавливается вместе с vimпакетом, велики шансы, что я смогу его использовать.
DeltaIV
1
@BurnsBA Спасибо, это действительно полезно для этого сайта. Btw. Вы можете редактировать посты других людей и даже получить +2 репутации, если ваше редактирование пройдет через некоторый процесс рецензирования. Но так же я узнал что-то новое :-).
Алло
4

Если вы хотите продолжать использовать dwи тому подобное, а также хотите, чтобы он работал двойным щелчком по слову, вы можете добавить

set iskeyword+=-

к вашему .vimrc, который добавляет -в качестве символа слова.

Пример:

Двойной щелчок по любому персонажу в ab-cdвизуально подсвечивается ab-cd.

nst0022
источник
Я в порядке с переключением на dW, но ваше решение также довольно круто, потому что, я думаю, оно влияет и на визуальный режим. Я имею в виду, изменив iskeyword, дважды щелкнув и затем нажав, dя должен иметь возможность удалить ab-cd. Правильно?
DeltaIV
Или, может быть, я должен переключиться в визуальный режим v, а не двойной щелчок. Правильно?
DeltaIV
1
@DeltaIV, изменив iskeyword, вы можете использовать любой метод с текстовыми объектами (включая iw или aw, значительно более простой, чем при использовании мыши или визуального режима)
Д. Бен Нобл
4

Не забудьте команды f(найти) и t(чтобы). Я, вероятно, просто dt или df (обратите внимание на место в конце).

BurnsBA
источник