热门标签 | HotTags
当前位置:  开发笔记 > 开发工具 > 正文

将括号括起的文本向左或向右移动

如何解决《将括号括起的文本向左或向右移动》经验,为你挑选了1个好方法。

有没有人知道一个vim脚本/帮助器/命令,它可以让你在一行内左右移动一个被括号括起来的文本?

例如,我有这个带有和弦注释的文本,我希望有一个快捷方式,我可以在括号内移动和弦,例如

Some lyrics and te[Am]xt line
                   ^
Some lyrics and t[Am]ext line
                  ^

这将向左移动一步.

我确信这是可能的(我猜几乎一切都可能与vim),但我不知道如何,到目前为止还没有找到任何东西.



1> user852573..:

我不确定这是你想要的,但你可以尝试以下代码:

nno  [h  :call move_chords(0, v:count1)
nno  ]h  :call move_chords(1, v:count1)

fu! s:move_chords(fwd, cnt) abort
    let pos  = virtcol('.')
    let pat1 = '\[?\k{-}%#&(\[\k*\])('.repeat('.', a:cnt).')'
    let pat2 = repeat('.', a:cnt).'\[?\k{-}%#&('.repeat('.', a:cnt).')(\[\k*\])'
    exe 'keepj keepp s/\v'.(a:fwd ? pat1 : pat2).'/\2\1/e'
    exe &modified ? 'norm! '.(pos+(a:fwd ? a:cnt : -a:cnt)).'|' : ''
endfu

它应该使用键序列安装2个映射,[h并将]h方括号内的文本移动到当前光标位置左侧或右侧.它应该接受计数,如果你想将文本移动得比单个字符更远:

在此输入图像描述

如果你使用vim-repeat插件,那么你可以使用dot命令代替重复相同的映射:

在此输入图像描述

...使用以前代码的修改版本:

nmap  [h                    (move_chords_backward)
nmap  ]h                    (move_chords_forward)
nno (move_chords_backward)    :call move_chords(0, v:count1)
nno (move_chords_forward)     :call move_chords(1, v:count1)

fu! s:move_chords(fwd, cnt) abort
    let pos  = virtcol('.')
    let pat1 = '\[?\k{-}%#&(\[\k*\])('.repeat('.', a:cnt).')'
    let pat2 = repeat('.', a:cnt).'\[?\k{-}%#&('.repeat('.', a:cnt).')(\[\k*\])'
    exe 'keepj keepp s/\v'.(a:fwd ? pat1 : pat2).'/\2\1/e'
    exe &modified ? 'norm! '.(pos+(a:fwd ? a:cnt : -a:cnt)).'|' : ''
    sil! call repeat#set("\(move_chords_".(a:fwd ? 'forward' : 'backward').')', a:cnt)
endfu


推荐阅读
  • 本文介绍了Linux系统中的文件IO操作,包括文件描述符、基本文件操作函数以及目录操作。详细解释了各个函数的参数和返回值,并提供了代码示例。 ... [详细]
  • 本文介绍了一种在 MySQL 客户端执行 NOW() 函数时出现时间偏差的问题,并详细描述了如何通过配置文件调整时区设置来解决该问题。演示场景中,假设当前北京时间为2023年2月17日19:31:37,而查询结果显示的时间比实际时间晚8小时。 ... [详细]
  • 在Fedora 31上部署PostgreSQL 12
    本文详细介绍如何在Fedora 31操作系统上安装和配置PostgreSQL 12数据库。包括环境准备、安装步骤、配置优化以及安全设置,确保数据库能够稳定运行并提供高效的性能。 ... [详细]
  • 本文探讨了如何在Classic ASP中实现与PHP的hash_hmac('SHA256', $message, pack('H*', $secret))函数等效的哈希生成方法。通过分析不同实现方式及其产生的差异,提供了一种使用Microsoft .NET Framework的解决方案。 ... [详细]
  • 本文详细介绍了如何在云服务器上配置Nginx、Tomcat、JDK和MySQL。涵盖从下载、安装到配置的完整步骤,帮助读者快速搭建Java Web开发环境。 ... [详细]
  • 本文将详细介绍如何在没有显示器的情况下,使用Raspberry Pi Imager为树莓派4B安装操作系统,并进行基本配置,包括设置SSH、WiFi连接以及更新软件源。 ... [详细]
  • CentOS 7.6环境下Prometheus与Grafana的集成部署指南
    本文旨在提供一套详细的步骤,指导读者如何在CentOS 7.6操作系统上成功安装和配置Prometheus 2.17.1及Grafana 6.7.2-1,实现高效的数据监控与可视化。 ... [详细]
  • 本文介绍了在MacOS上通过Homebrew安装Anaconda3,并配置环境变量以实现不同Python版本之间的快速切换。同时,提供了详细的步骤来创建和管理多个Python环境。 ... [详细]
  • 请看|间隔时间_Postgresql 主从复制 ... [详细]
  • NFS(Network File System)即网络文件系统,是一种分布式文件系统协议,主要用于Unix和类Unix系统之间的文件共享。本文详细介绍NFS的配置文件/etc/exports和相关服务配置,帮助读者理解如何在Linux环境中配置NFS客户端。 ... [详细]
  • 本文介绍如何在Linux系统中卸载预装的OpenJDK,安装指定版本的JDK 1.8,并配置防火墙以确保系统安全性和软件兼容性。 ... [详细]
  • 本文详细介绍了 Kubernetes 集群管理工具 kubectl 的基本使用方法,涵盖了一系列常用的命令及其应用场景,旨在帮助初学者快速掌握 kubectl 的基本操作。 ... [详细]
  • 利用SSH隧道实现外网对局域网机器的安全访问
    本文探讨了一种常见的网络配置问题及其解决方案,即如何在外网环境下安全地访问位于局域网内的计算机。特别介绍了使用SSH反向隧道技术来实现这一目标的具体步骤和注意事项。 ... [详细]
  • 在Linux系统上构建Web服务器的详细步骤
    本文详细介绍了如何在Linux系统上搭建Web服务器的过程,包括安装Apache、PHP和MySQL等关键组件,以及遇到的一些常见问题及其解决方案。 ... [详细]
  • 使用LVS与ldirectord实现高可用负载均衡
    本文介绍了如何通过LVS(Linux Virtual Server)结合ldirectord工具来实现服务器的健康检查及负载均衡功能。环境设置包括一个LVS节点和两个真实服务器节点,通过配置ldirectord进行健康状态监测,确保系统的高可用性。 ... [详细]
author-avatar
世界著名墙头草
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有