几个超级实用但很少人知道的 VS 技巧[更新]

大家好,今天分享几个我知道的实用 VS 技巧,而这些技巧我发现很多人都不知道。因为我经常在工作中遇到:我在同事电脑上解决问题,或在会议上演示代码示例时,使用了一些 VS “骚”操作,他们会好奇地问:你是怎么做到的?这给我的感觉,有时候你知道一些别人不知道的小技巧便可以让你显得更专业。

PS:本文所有示例演示均基于 VS 2019 版本。

1. 扩展/缩小选区

通过双击选中整个单词,这个操作大家应该都知道。但如何快速选择几个单词、或多个单词的字符串、或代码块呢?教大家一个快捷键,如何快速扩展选择代码区域。例如,当光标在一个字符串中时,使用下面的快捷键就可以选择整个字符串。

Alt + Shift + = 扩展选区,按 Alt + Shift + - 缩小选区:

你也可以使用 Alt + Shift + ] 直接选中一个代码块。

2. 切换窗口停靠

我们知道 VS 的窗口布局可以非常灵活的拖动,想摆哪摆哪。我们一般把常用的视图窗口固定停靠在编辑器的左边、右边或下边。但有时候为了查看方便,你可能需要临时把窗口拖到另一个位置(比如中心位置)。完了以后你还需要再次把它停靠到原来的位置,这样拖动起来就会比较麻烦。有一种非常快速的方法可以将窗口停靠到它之前停靠的位置。

Ctrl + 双击窗口标题:

3. 快速定位打开的文件

在 VS 中,你可以使用 Ctrl + T 打开 “Go To All” 搜索工具栏,通过搜索关键字轻松打开要找的文件。但是对于某些操作,比如重命名文件,你需要在解决方案资源管理器中找到该文件。

使用 Ctrl + [, S 或使用下面的图标按钮可以快速定位到当前打开的文件:

4. 多行编辑

Visual Studio 允许同时编辑多行,这对于将相同的更改应用于多行非常有用,例如同时修改多个属性的修饰符。下面有 4 个多行编辑代码的技巧。

按住 Alt 键,使用鼠标拖选:

按住 Alt + Shift 键,再按上/下/左/右方向键选择:

使用多个光标同时编辑。按住 Ctrl + Alt 键,点击或选择要插入或编辑的位置:

匹配相同单词并编辑。先选择要编辑的单词或字符,再按一下 Alt + Shift + ;,会自动匹配并选中所有相同的单词,然后开始编辑:

你也可以使用 Alt + Shift + . 只匹配选择下一个相同的单词。

5. 使用剪贴板历史粘贴

复制粘贴是写代码很常见的操作。我们在 Ctrl + V 时默认是粘贴你最后一次复制的内容,但有时你想使用上一次复制的内容,你可能会重新再复制一下。剪贴板一次只能包含一个内容。Visual Studio 附带了一个剪贴板历史记录,默认它包含你复制到剪贴板的最后 20 项记录。

通过使用 Ctrl + Shift + V,可以打开剪贴板的历史记录:

你可以将多个内容复制到剪贴板,并在稍后依次粘贴到相应的位置。

6. 整行上下移动

有时候我们需要调整一下代码行的位置,比如将代码行上移或下移几行。可以按住 Alt,然后使用上下方向键移动整行代码:

7. 直接拖动引用项目

在 VS 中的一个项目中引用另一个项目最方便的方法是直接把要引用的项目拖到该项目。

8. 设置 git pull 快捷键

最常用的 Git 操作就是 Pull 了,平时大家都是在 Team Explorer 窗口依次点击 Sync -> Pull 来操作。但用快捷键更方便,可以在 Tools -> Options -> Keyboard 中为 Git Pull 设置一个快捷键,比如设置为 CTRL + SHIFT + P

9. 打开命令行窗口

我经常需要在项目的根目录打开命令行窗口执行一些命令,比如 dotnet ef 相关的命令。在 VS 2019 之前,每次要打开命令行窗口并定位到项目的根目录是相当的麻烦。好在 VS 2019 终于内置了命令行窗口,通过快捷键 Ctrl + ` 打开,或者点击 View -> Teminal 打开。打开后默认定位到项目的根目录,还可以创建多个 Tab。

10. 设置私有字段使用下划线前缀

默认情况下,VS 智能补全对类的私有字段使用的是 camelCase 命名风格,但有很多人更习惯使用 _camelCase 风格对私有字段命名,类的私有字段前面加 _ 前缀有助于和本地变量进行区分。我们可以通过设置来改变默认的 camelCase 命名行为,具体设置步骤如下。

依次点击:Tools -> Options -> Text Editor -> C# -> Code Style -> Naming -> Manage naming styles。

按照上面步骤操作后你会看到一个窗口,然后按照下图添加一个 Naming Style:

好了,来试试效果:

其它

本文只罗列了几个很多人都不知道的 VS 实用技巧,当然还有很多大多数人都知道的技巧,比如 Ctrl + D 复制当前行、Ctrl + X 剪切/删除当前行、Shift + Enter 新启一行等等,在这里就不一一罗列了。

你还知道哪些实用的 VS 使用技巧?欢迎留言分享!

本文更新于:2020年09月22日

-

精致码农

带你洞悉编程与架构

↑长按图片识别二维码关注,不要错过网海相遇的缘分

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/307622.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一般动态规划问题合集(Leetcode题解-Python语言)

118. 杨辉三角 class Solution:def generate(self, numRows: int) -> List[List[int]]:dp [[0] * i for i in range(1, numRows1)]for i in range(numRows):for j in range(len(dp[i])):# 左右两边是1,中间部分就是其上方两个数之和if j 0 or j i:dp[i][j] …

leetcode53. 最大子数组和(动态规划)

一:题目 二:上码 class Solution { public:int maxSubArray(vector<int>& nums) {/**动态规划:1>:确定dp数组的含义以及下标的含义dp[j]表示的是下标j之前的最大子数组和 这个就是还没有包括nums[j] 2>:确定dp数组的状态转移公式dp[j] max (dp[j-1]nums[j],n…

矩阵模拟问题合集(Leetcode题解-Python语言)

54. 螺旋矩阵&#xff08;剑指 Offer 29. 顺时针打印矩阵&#xff09; class Solution:def spiralOrder(self, matrix: List[List[int]]) -> List[int]:ans []count 0m, n len(matrix), len(matrix[0])length m * ndirections [(0, 1), (1, 0), (0, -1), (-1, 0)]x y…

基于REACT和.NET CORE集成WINDOWS身份验证

有很多方法可以向您的应用程序添加身份验证。虽然OAuth是最常见的一种&#xff0c;但这并不是您唯一的选择。今天&#xff0c;我将向您展示如何通过React和.NET Core简单地完成Windows身份验证。探索我们的选择在深入探讨之前&#xff0c;让我们简要讨论一些可用的其他选项。了…

.NET Core加解密实战系列之——使用BouncyCastle制作p12(.pfx)数字证书

简介加解密现状&#xff0c;编写此系列文章的背景&#xff1a;需要考虑系统环境兼容性问题&#xff08;Linux、Windows&#xff09;语言互通问题&#xff08;如C#、Java等&#xff09;&#xff08;加解密本质上没有语言之分&#xff0c;所以原则上不存在互通性问题&#xff09;…

快速幂算法相关题目(Leetcode题解-Python语言)

50. Pow(x, n) 快速幂算法的目的&#xff0c;就是快速计算 x 的 n 次方。基本思路是把 n 视作二进制数&#xff0c;则 n 可以被分解为多个 2 的幂次方之和&#xff0c;如 12 对应 1100 等于 0∗200∗211∗221∗230*{2^0} 0*{2^1} 1*{2^2} 1*{2^3}0∗200∗211∗221∗23&…

leetcode115. 不同的子序列

一&#xff1a;题目 二:代码 class Solution { public:/**思路:动规分析走一波1>:确定dp数组以及下标的含义dp[i][j] 表示的是 以下标i-1结尾的子序列s中出现以j-1结尾的子序列t的 个数2>:确定dp数组的状态递推公式这里考虑两种状况 一种就是 s[i-1] s[j-1] 一种就是字…

栈的基础概念与经典题目(Leetcode题解-Python语言)

栈是先入后出&#xff08;后入先出&#xff09;的数据结构&#xff0c;常用操作就 push 和 pop&#xff0c;Python中用列表实现即可&#xff0c;基本概念可以看Leetbook相关章节。 普通栈 232. 用栈实现队列 class MyQueue:def __init__(self):self.stack1 []self.stack2 …

ASP.NET Core 3.x启动时运行异步任务(二)

这一篇是接着前一篇在写的。如果没有看过前一篇文章&#xff0c;建议先去看一下前一篇&#xff0c;这儿是传送门一、前言前一篇文章&#xff0c;我们从应用启动时异步运行任务开始&#xff0c;说到了必要性&#xff0c;也说到了几种解决方法&#xff0c;及各自的优缺点。最后&a…

leetcode583. 两个字符串的删除操作

一:题目 二:上码 class Solution { public:/**思路:题目给的是让求最值,那么首先就会想到的是动态规划,我们想得到答案的结果其实有多个的&#xff0c;但是我们是取最小的步数动态规划 五步走:1>:确定dp数组以及下标的含义dp[i][j]表示的是 以下标i-1结尾的字符串word1,和…

C# 中居然也有切片语法糖,太厉害了

一&#xff1a;背景 1. 讲故事昨天在 github 上准备找找 C# 9 又有哪些新语法糖可以试用&#xff0c;不觉在一个文档上看到一个很奇怪的写法: foreach (var item in myArray[0..5]) 哈哈&#xff0c;熟悉又陌生&#xff0c;玩过python的朋友对这个 [0..5] 太熟悉不过了&#x…

子串、子数组与子序列类型问题的动态规划求解(Leetcode题解-Python语言)

一般来说&#xff0c;子串和子数组都是连续的&#xff0c;而子序列是可以不连续的&#xff0c;遇到子序列问题基本上都是用动态规划求解。 53. 最大子数组和&#xff08;剑指 Offer 42. 连续子数组的最大和&#xff09; class Solution:def maxSubArray(self, nums: List[int…

跟我一起学.NetCore之中间件(Middleware)简介和解析请求管道构建

前言中间件(Middleware)对于Asp.NetCore项目来说&#xff0c;不能说重要&#xff0c;而是不能缺少&#xff0c;因为Asp.NetCore的请求管道就是通过一系列的中间件组成的&#xff1b;在服务器接收到请求之后&#xff0c;请求会经过请求管道进行相关的过滤或处理&#xff1b;正文…

leetcode647. 回文子串

一&#xff1a;题目 二&#xff1a;上码 class Solution { public:/**思路:动态规划五步走1>:确定dp数组以及下标的含义dp[i][j] 表示的是在[i,j]范围内的字串 是否是 回文子串&#xff0c;如果是的话那么dp[i][j] true2>确定dp数组的状态转移方程那么就有两种情况 s[i…

Leetcode周赛复盘——第 276 场力扣周赛

第一次参加周赛&#xff0c;AC了三道题&#xff0c;也算不错的成绩了&#xff0c;从现在开始每周的周赛我都会参加并且复盘&#xff0c;有兴趣的小伙伴可以一起讨论。 5980. 将字符串拆分为若干长度为 k 的组 class Solution:def divideString(self, s: str, k: int, fill: s…

leetcode516. 最长回文子序列

一:题目 二:上码 class Solution { public:/**思路:1.分析题意 这个是让我们求最值,那么首先想到动态规划2.动态规划1>:确定dp数组以及下标的含义dp[i][j] 表示字符串在[i,j]范围内的最长回文子序列2>:确定dp数组的状态递推公式那么就是s[i] 与 s[j] 相等 不相等两种情况…

Leetcode周赛复盘——第 278 场力扣周赛

5993. 将找到的值乘以 2 我的做法是将数组从小到大排序之后&#xff0c;再将找到的值乘以2&#xff1a; class Solution:def findFinalValue(self, nums: List[int], original: int) -> int:nums.sort()for num in nums:if original num:original * 2return original然而…

C#刷剑指Offer | 二叉搜索树的后序遍历序列

【C#刷题】| 作者 / Edison Zhou这是EdisonTalk的第289篇原创内容我们来用之前学到的数据结构知识来刷《剑指Offer》的一些核心题目&#xff08;精选了其中30道题目&#xff09;&#xff0c;希望对你有帮助&#xff01;本文题目为&#xff1a;二叉搜索树的后序遍历序列。1题目介…

leetcode739. 每日温度

一:题目 二:上码 // class Solution { // public: // vector<int> dailyTemperatures(vector<int>& temperatures) { // vector<int> ans(temperatures.size(),0);// for (int i 0; i < temperatures.size(); i) {// …

Leetcode周赛复盘——第 71 场力扣双周赛与第 279 场力扣周赛

双周赛&#xff1a; 5984. 拆分数位后四位数字的最小和 class Solution:def minimumSum(self, num: int) -> int:a, b, c, d sorted(list(map(int, str(num))))return 10 * (a b) c dstr(num)得到字符串序列&#xff0c;然后用map函数对序列的每个字符转换为数字&…