Самый быстрый способ добавить " в конце слова в редакторах (vim, notepad++ и т. д.)

Предположим, у нас есть текстовый файл следующего формата:

x,
xxx,
xx,
xxxxx,
xxx,
x,
xx,

и так далее.

При импорте данных в панду Python слова должны быть окружены символами «или». Используя notead++ или Pycharm (интерфейс vim), можно ли добавить какой-то ярлык для добавления «или» ко всем словам в этом файле, чтобы он выглядел следующим образом:

'x',
'xxx',
'xx',
'xxxxx',
'xxx',
'x',
'xx'

Я удерживал клавишу ALT в блокноте ++, чтобы добавить ' в тот же столбец текстового файла, но это работает только тогда, когда слова выровнены и имеют одинаковый размер. Я помню, как в конце девяностых мой друг использовал для этого ярлык в VIM, поэтому я решил спросить, как лучше всего это сделать, поскольку это очень распространенная операция. Когда файл действительно большой, я иногда использую функцию поиска и замены, но это работает только тогда, когда файл хорошо структурирован.

Есть ли передовой опыт в этом?

Обновлено: проясняя вопрос, я часто получаю файлы в «несколько» формате CSV. Я говорю «несколько», потому что обычно возникают проблемы. А пока давайте просто предположим, что я не могу использовать pandas.read_csv() и мне нужно скопировать и вставить данные в консоль Python для тестирования.

Файл будет иметь формат:

, col_name1, col_name2, col_name3, ... , col_namen ,
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
, col1, col2, col3, ..., coln ,
.
.
.
for n rows

Я никогда не знаю заранее, каким будет формат col1. Это может быть целое число, число с плавающей запятой, дата, текст или всякая ерунда, которую мне нужно отбросить.

Строки, являющиеся датами или строками, должны быть заключены в кавычки, чтобы я мог скопировать и вставить их в терминал Python.

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

Привет, добрый день. Конечно, в Vim вы могли бы сделать что-то подобное, %s/\w\+/"&"/g

Patrick Bacon 03.09.2024 23:22

Кстати, пожалуйста, уточните, есть ли в ваших словах (например, «xxxxx») дефисы или цифры (разные системы регулярных выражений обрабатывают это по-разному).

Patrick Bacon 03.09.2024 23:36
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
2
121
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В Vim есть много способов сделать это, но нет готовых решений для этой задачи. Вот некоторые из них.

Используя замену:

:%s/^[^,]*/'&'

где:

  • ^ закрепляет рисунок в начале строки,
  • [^,]* соответствует любому символу, кроме запятой, ноль или более раз, как можно больше раз,
  • '&' заменяет совпадающий текст самим собой, в одинарных кавычках.

Это приводит к цитированию всего, что стоит перед первым ,. Конечно, шаблон необходимо будет скорректировать, чтобы учесть ведущие пробелы или другие особенности.

Использование одноразового макроса:

:%normal ^ct,'<C-v><C-r>"'

где:

  • :[range]normal <cmd> выполняет обычный режим <cmd> для каждой строки в [range], здесь для каждой строки в буфере,
  • ^ перемещает курсор на первый непустой символ строки,
  • ct, обрезает текст от курсора до первой запятой, исключая, и переходит в режим вставки,
  • ' вставляет одинарную кавычку,
  • <C-v><C-r> — это то, как вы вставляете литерал <C-r> (^R) в этом контексте,
  • ^R" вставляет текст, который был вырезан последним,
  • ' вставляет еще одну одинарную кавычку.

На практике у каждого есть плагин Surround, который, по общему признанию, делает это намного более интуитивно понятным:

:%normal ^yst,'

Оба подхода работают как есть с вашим первым примером текста и могут быть сопоставлены, если вам это нужно очень часто:

xnoremap <F5> :normal ^ct,'<C-r>"'<CR>

Здесь вы, вероятно, даже могли бы использовать AWK.

Однако все это очень просто, и ваше описание того, что сделал этот коллега, и ваш более реалистичный пример заставляют меня думать, что они либо:

  • использовал кучу весьма специфических пользовательских сопоставлений/команд,
  • используемые сопоставления/команды, предоставленные одним или несколькими сторонними плагинами.

Пользователи Vim, как правило, часто создают первый тип по мере развития их потребностей. Они, как правило, очень зависят от контекста, и их будет сложно воспроизвести с таким небольшим количеством информации. Более того, эмуляторы Vim, такие как IdeaVim, могут не иметь всех необходимых функций. Если вы хотите пойти по этому пути, то пара приведенных выше примеров будет такой же хорошей основой, как и любой другой, но вам придется проделать всю работу.

Поскольку эмуляторы Vim не являются Vim, сторонние плагины Vim использовать нельзя, и любой плагин, который использовал ваш коллега, не может использоваться в вашем контексте. Если вы можете использовать настоящий Vim, поищите специальный плагин, ориентированный на CSV, или, возможно, более низкоуровневый плагин, например тот, который предоставит текстовый объект «столбец», совместимый с вашим понятием «столбец». Предполагая…

  • такой плагин существует и предоставляет текстовый объект ic,
  • у вас есть плагин Surround,

тогда вам нужно будет только поместить курсор в столбец и сделать:

ysic'

Но это много предположений.

Другие вопросы по теме